05 Spark:RDD行动算子

RDD 行动算子

1. reduce(func)

  1. 作用: 通过 func 函数聚集 RDD 中的所有元素,先聚合分区内数据,再聚合分区间数据。

  2. 示例:

    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

  1. 作用: 以数组的形式返回 RDD 中的所有元素。

  2. 示例:

    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()

  1. 作用: 返回 RDD 中元素的个数。

  2. 示例:

    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)

  1. 作用: 返回 RDD 中前 n 个元素组成的数组。

  2. 示例:

    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

  1. 作用: 返回 RDD 中的第一个元素组层的数组。

  2. 示例:

    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])

  1. 作用: 返回排序后的前 n 个元素,默认是升序。

  2. 示例:

    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)

  1. 作用: aggregate 函数将每个分区⾥⾯的元素通过 seqOp 和初始值进⾏聚合,然后⽤ combine 函数将每个分区的结果和初始值(zeroValue)进⾏ combine 操作。这个函数最终返回的类型不需要和 RDD 中元素类型⼀致。zeroValue 分区内聚合和分区间聚合的时候各会使⽤⼀次.。

  2. 示例:

    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

  1. 作用: 折叠操作, aggregate 的简化操作, seqOpcomOp ⼀样的时候,可以使⽤ fold

  2. 示例:

    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)

  1. 作用: 将数据集的元素以 textfile 的形式保存到 HDFS ⽂件系统或者其他⽀持的⽂件系统,对于每个 元素,Spark 将会调⽤ toString ⽅法,将它装换为⽂件中的⽂本。

  2. 示例:

    scala> rdd.saveAsTextFile("hdfs://hadoop101:9000/output")
    

10. saveAsSequenceFile(path)

  1. 作用: 将数据集中的元素以 Hadoop sequencefile 的格式保存到指定的⽬录下,可以使 HDFS 或者其

    Hadoop ⽀持的⽂件系统。

11. saveAsObjectFile(path)

  1. ⽤于将 RDD 中的元素序列化成对象,存储到⽂件中。

12. countByKey()

  1. 作用: 针对 (K,V) 类型的 RDD ,返回一个 (K,Int)map ,表示每一个 key 对应的元素个数。

  2. 示例:

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)

  1. **作用:**针对 RDD 中的每个元素都执行一次 func

  2. 示例:

    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
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值