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个元素
posted @ 2022-01-22 21:31  不咬牙  阅读(118)  评论(0编辑  收藏  举报