RDD 行动算子
文章目录
1. reduce(func)
-
作用: 通过
func
函数聚集RDD
中的所有元素,先聚合分区内数据,再聚合分区间数据。 -
示例:
scala> val rdd = sc.makeRDD(1 to 100) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[153] at makeRDD at <console>:24 scala> val newRdd = rdd.reduce(_+_) newRdd: Int = 5050 scala> val rdd = sc.makeRDD(Array(("a",1),("b",2),("c",3))) rdd: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[154] at makeRDD at <console>:24 scala> val newRdd = rdd.reduce((item1,item2) => (item1._1 + item2._1, item1._2 + item2._2)) newRdd: (String, Int) = (acb,6)
2. collect
-
作用: 以数组的形式返回
RDD
中的所有元素。 -
示例:
scala> val rdd = sc.makeRDD(1 to 10) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[155] at makeRDD at <console>:24 scala> rdd.collect res75: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
3. count()
-
作用: 返回
RDD
中元素的个数。 -
示例:
scala> val rdd = sc.makeRDD(1 to 10) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[156] at makeRDD at <console>:24 scala> rdd.count res76: Long = 10
4. take(n)
-
作用: 返回
RDD
中前n
个元素组成的数组。 -
示例:
scala> val rdd = sc.makeRDD(1 to 10) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[157] at makeRDD at <console>:24 scala> rdd.take(3) res77: Array[Int] = Array(1, 2, 3)
5. first
-
作用: 返回
RDD
中的第一个元素组层的数组。 -
示例:
scala> val rdd = sc.makeRDD(1 to 10) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[158] at makeRDD at <console>:24 scala> rdd.first res78: Int = 1
6. takeOrdered(n, [ordering])
-
作用: 返回排序后的前
n
个元素,默认是升序。 -
示例:
scala> val rdd = sc.makeRDD(Array(3,7,4,8,2,9,0,5)) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[159] at makeRDD at <console>:24 scala> rdd.takeOrdered(5) res79: Array[Int] = Array(0, 2, 3, 4, 5) scala> rdd.takeOrdered(5)(Ordering.Int.reverse) res81: Array[Int] = Array(9, 8, 7, 5, 4)
7. aggregate(zeroValue)(seqOp, comOp)
-
作用:
aggregate
函数将每个分区⾥⾯的元素通过seqOp
和初始值进⾏聚合,然后⽤combine
函数将每个分区的结果和初始值(zeroValue
)进⾏combine
操作。这个函数最终返回的类型不需要和RDD
中元素类型⼀致。zeroValue
分区内聚合和分区间聚合的时候各会使⽤⼀次.。 -
示例:
scala> val rdd = sc.makeRDD(Array("a","b","c","d"),2) rdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at makeRDD at <console>:24 scala> rdd.aggregate("x")(_+_,_+_) res1: String = xxabxcd
8. fold
-
作用: 折叠操作,
aggregate
的简化操作,seqOp
和comOp
⼀样的时候,可以使⽤fold
。 -
示例:
scala> val rdd = sc.makeRDD(Array("a","b","c","d"),2) rdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[1] at makeRDD at <console>:24 scala> rdd.fold("x")(_+_) res2: String = xxabxcd
9. saveAsTextFile(path)
-
作用: 将数据集的元素以
textfile
的形式保存到HDFS
⽂件系统或者其他⽀持的⽂件系统,对于每个 元素,Spark
将会调⽤toString
⽅法,将它装换为⽂件中的⽂本。 -
示例:
scala> rdd.saveAsTextFile("hdfs://hadoop101:9000/output")
10. saveAsSequenceFile(path)
-
作用: 将数据集中的元素以
Hadoop sequencefile
的格式保存到指定的⽬录下,可以使HDFS
或者其他
Hadoop
⽀持的⽂件系统。
11. saveAsObjectFile(path)
- ⽤于将
RDD
中的元素序列化成对象,存储到⽂件中。
12. countByKey()
-
作用: 针对
(K,V)
类型的RDD
,返回一个(K,Int)
的map
,表示每一个key
对应的元素个数。 -
示例:
scala> val rdd = sc.makeRDD(Array(("a",2),("b",3),("a",1)))
rdd: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[8] at makeRDD at <console>:24
scala> rdd.countByKey
res8: scala.collection.Map[String,Long] = Map(a -> 2, b -> 1)
13. foreach(func)
-
**作用:**针对
RDD
中的每个元素都执行一次func
。 -
示例:
scala> val rdd = sc.makeRDD(1 to 10) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[11] at makeRDD at <console>:24 scala> rdd.foreach(println) 1 2 3 4 6 7 5 8 9 10