1月22日
Action算子:
1-foreach:算子:
一对一的遍历算子,主要用于打印,但是控制台上不会显示结果数据,数据在每个Executor中自己打印自己处理完的数据:
scala> val a=Array(1,2,3,4,5,6)
a: Array[Int] = Array(1, 2, 3, 4, 5, 6)
scala> sc.makeRDD(a,3)
res0: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at makeRDD at <console>:27
scala> res0.foreach(println)
2-foreachPartition:算子:
** 每次遍历一个分区中的数据:
** 和mapPartitons的区别:都是遍历一个分区中的数据,但是区别是: mapPartitons是有返回值的转换 类算子,foreachPartition算子是行动类算子没有返回值。
** 打印结果也是在Executor中显示,和foreach算子比较的好好处是:循环迭代的次数减少了。
3- collect :算子:
** 将每个分区中的数据进行收集,收集到本地磁盘:
4- reduce:算子:
** 通过reduce中的func函数聚集RDD中的所有元素,先聚合分区内数据,再聚合分区间数据。
5- count:算子:
** 返回RDD中元素的个数: 不常用。
7- take:算子:
** 截取RDD中的元素:
** 当程序遇见一个action算子就会产生要给job,但是程序遇见take算子会产生两个或者一个或者多个job:
原因是:跨分区获取数据了:
scala> val a=Array(("zhangsan",1000),("lisi",2000),("wangwu",3000))
a: Array[(String, Int)] = Array((zhangsan,1000), (lisi,2000), (wangwu,3000))
scala> sc.makeRDD(a,3)
res24: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[8] at makeRDD at <console>:27
scala> res24.take(2)
res25: Array[(String, Int)] = Array((zhangsan,1000), (lisi,2000))
8- saveAsTextFile:算子:
saveAsTextFile将元素以textfile的格式存储在文件中,可以保存到本地,也可以保存到HDFS 。
val data=Array(("hello",1),("hello",1),("world",2),("world",2))
val rdd1: RDD[(String, Int)] = sc.makeRDD(data,3)
rdd1.saveAsTextFile("src//res")
9- top:算子:
**先将RDD中的数据倒叙进行排序,然后返回RDD中最大的N个元素
scala> val a=Array(1,2,3,4,5,6,7,8,9,10)
a: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> sc.makeRDD(a,3)
res26: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[9] at makeRDD at <console>:27
scala> res26.top(5)
res27: Array[Int] = Array(10, 9, 8, 7, 6)
10- takeOrdered:算子:和top算子正好相反
**先将RDD中的数据倒叙进行排序,然后返回RDD中最小的N个元素