[Apache Spark大数据分析入门(一)(http://www.youkuaiyun.com/article/2015-11-25/2826324)
spark 笔记 5: SparkContext,SparkConf
# 创建textFileRDD
val textFile = sc.textFile("README.md")
textFile.first() #获取textFile RDD的第一个元素
res3:String = # Apache Spark
# 筛选出包括Spark关键字的RDD然后进行行计数
val linesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark.count()
res10:Long = 19
# 找出RDD textFile中包含单词数最多的行
textFile.map(line=>line.split(" ").size).reduce((a,b)=>Math.max(a,b))
res12:Int = 14 #第14行是包含单词最多的行
# 在scala shell中引入Java方法:
import java.lang.Math
textFile.map(line=>line.split(" ").size).reduce((a,b) => Math.max(a,b))
#将RDD linesWithSpark 缓存,然后进行计数
linesWithSpark.cache()
res13:linesWithSpark.type =
MapPartitionsRDD[8] at filter at <console>:23
linesWithSpark.count()
res15:Long = 19
RDD:
makeRDD 和 parallelize是一样的,不过makeRDD好像只能scala用,parallelize是Python和 R都能用的
# 通过单词列表集合创建RDD thingsRDD
val thingsRDD = sc.parallelize(List("spoon","fork","plate","cup","bottle"))
# 计算RDD thingsRDD中单词的个数
thingsRDD.count()
res16:Long = 5
groupByKey( )转换操作
pairRDD.groupByKey()
#得到:
Banana [Yellow]
Apple [Red, Green]
Kiwi [Green]
FIgs [Black]
collect 或 materialize linesWithSpark RDD中的数据
collect方法返回计算好的数值。??
linesWithSpark.collect()
缓存RDD linesWithSpark
linesWithSpark.cache()
将linesWithSpark从内存中删除
linesWithSpark,unpersist()
RDD的部分转换操作:
转换操作 | 作用 |
---|---|
filter() | 过滤 |
map() | 将一个RDD中的每个数据项,通过map中的函数映射为一个新的元素,返回集合对象 |
flatMap() | 先map,再将所有的输出分区合并成一个。 |
distinct() | 对RDD中的元素进行去重操作 |
coalesce() | 将RDD进行重新分区,使用HashPartitioner |
repartition() | coalesce函数第二个参数为true的实现 |
sample() | |
union() | 将2个RDD合并,不去重 |
intersection() | 返回两个RDD的交集,并且去重 |
subtract | 类似intersection,返回在RDD中出现,并且不在otherRDD中出现的元素,不去重。 |
mapPartitions | 与map类似,按分区进行映射 |
mapPartitionsWithIndex | 同mapPartitions,多提供了2个参数 |
zip | 用于将两个RDD组合成Key/Value形式的RDD,这里默认两个RDD的partition数量以及元素数量都相同,否则会抛出异常。 |
zipPartitions | 将多个RDD按照partition组合成为新的RDD,该函数需要组合的RDD具有相同的分区数,但对于每个分区的元素数量没有要求 |
partitionBy | |
mapValues | |
flatMapValues | |
combineByKey | |
foldByKey | |
groupByKey() | |
reduceByKey() | |
reduceByKeyLocally | |
randomSplit() | 根据weights权重,将一个RDD切分成多个RDD |
Action操作 | 说明 |
---|---|
first | |
count | |
reduce | |
collect | |
take | |
top | |
takeOrdered | |
aggregate | |
fold | |
lookup | |
countByKey | |
foreach | |
foreachPartition | |
sortBy | |
saveAsTextFile | |
saveAsSequenceFile | |
saveAsObjectFile |