分类
RDD 算子有很多,主要分两类:
转换:从一个RDD 转换生成另一个 RDD,其目的是为了 处理数据。转换算子是 惰性操作,只是定义了RDD,但并 没有立即执行
如:map()、flatMap()行动(执行):有行动算子才会 让转换算子运行,即:触发任务的 调度 和作业的 执行,也就是能够触发Spark运行
如:collect()、foreach、saveAsTextFile
例子
没有 行动算子,例子中的转换算子,即:map()算子不会运行,不会打印 1111
val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("mywordcount")
val sc: SparkContext = new SparkContext(conf)
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4),3)
val resRDD = rdd.map(item => {
println(1111)
item
})
// resRDD.collect() // 注销此行代码,map()算子不会运行,不会打印1111
sc.stop()
转换算子分类
RDD 根据数据处理方式的不同将算子整体上分为:
单 value 类型。有一个RDD
map()
mapPartitions()
mapPartitionsWithIndex()
flatMap()
glom()
groupBy()
filter()
sample()
distinct()
coalesce()
repartition()
sortBy()
双 value 类型。需要2个RDD
intersection交集
union并集
subtract差集
zip拉链
Key-Value 类型。源RDD和返回RDD是key-value类型
partitionBy
reduceByKey
groupByKey
join
rightOuterJoin
leftOuterJoin
cogroup()
sortByKey()
行动算子操作
collect
reduce
count
take()
takeOrdered()
aggregate
fold
countByValue
countByKey
first
foreach
foreachPartition
保存
saveAsTextFile
saveAsObjectFile
saveAsSequenceFile