行动算子总结
所谓的行动算子,其实就是用于触发RDD运行的方法
spark中,调用RDD对象的行动算子,会执行作业,每一次调用,都会执行不同的作业
reduce:聚集RDD中的所有元素,先聚合分区内数据,再聚合分区间数据
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4),2)
rdd.map(_*2)
val i: Int = rdd.reduce(_+_)
rdd.collect()
println(i)
collect:在驱动程序(Driver)中,以数组Array的形式返回数据集的所有元素
collect算子会按照分区编号采集数据
collect会将分布式的数据汇总到driver端
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
// 收集数据到driver
rdd.collect().foreach(println)
count:返回RDD中元素的个数
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
val l: Long = rdd.count()
print(l)
first:返回RDD中的第一个元素
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
val i: Int = rdd.first()
println(i)
take:返回一个由RDD的前n个元素组成的数组
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
val i: Array[Int] = rdd.take(2)
i.foreach(println)
takeOrdered:返回该RDD排序后的前n个元素组成的数组
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4))
val ints: Array[Int] = rdd.takeOrdered(3)(Ordering.Int.reverse)
ints.foreach(println)
aggregate:分区的数据通过初始值和分区内的数据进行聚合,然后再和初始值进行分区间的数据聚合
算子的初始值再分区内和分区间都会参与运算
fold:折叠操作,aggregate的简化版操作
val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4),2)
val result: Int = rdd.aggregate(2)(_+_,_+_)
val result1: Int = rdd.fold(2)(_+_)
println(result)
println(result1)
countByKey:统计每种key的个数
val rdd: RDD[(Int, String)] = sc.makeRDD(List((1, "a"), (1, "a"), (1, "a"), (2, "b"), (3, "c"), (3, "c")))
val map: collection.Map[Int, Long] = rdd.countByKey()
map.foreach(println)
save相关算子:将数据保存到不同格式的文件中
foreach:分布式遍历RDD中的每一个元素,调用指定函数