SparkRDD函数详解(二)--RDD动作操作函数

1 篇文章 0 订阅

  相对于转换,动作(Action)操作用于向驱动(Driver)程序返回值或者将值写入到文件当中。

  1. reduce(func):通过func函数聚集RDD中的所有元素,这个功能必须是可交换且可并联的
 val rdd1 = sc.makeRDD(1 to 10,2)
 rdd1.reduce(_+_)
val rdd2 = sc.makeRDD(Array(("a",1),("a",3),("c",3),("d",5)))
rdd2.reduce((x,y)=>(x._1 + y._1,x._2 + y._2))
  1. collect():在驱动程序中,以数组的形式返回数据集的所有元素
val rdd1 = sc.makeRDD(1 to 10,2)
rdd1.collect()
  1. count():返回RDD的元素个数
val rdd1 = sc.makeRDD(1 to 10,2)
rdd1.count()
  1. first():返回RDD的第一个元素(类似于take(1))
val rdd1 = sc.makeRDD(1 to 10,2)
rdd1.first()
  1. take(n):返回一个由数据集的前n个元素组成的数组
val rdd1 = sc.makeRDD(1 to 10,2)
rdd1.take5)
  1. takeSample(withReplacement,num, [seed]):返回一个数组,该数组由从数据集中随机采样的num个元素组成,可以选择是否用随机数替换不足的部分,seed用于指定随机数生成器种子
val rdd1 = sc.makeRDD(1 to 10,2)
rdd1.collect()
rdd1.takeSample(true,5,3)
  1. takeOrdered(n):返回前几个的排序
val rdd = sc.makeRDD(Seq(10,4,2,5,6))
rdd.takeOrderd(3)
  1. aggregate (zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U):aggregate函数将每个分区里面的元素通过seqOp和初始值进行聚合,然后用combine函数将每个分区的结果和初始值(zeroValue)进行combine操作。这个函数最终返回的类型不需要和RDD中元素类型一致。
var rdd1 = sc.makeRDD(1 to 10,2)
rdd1.aggregate(1)(
     | {(x : Int,y : Int) => x + y},
     | {(a : Int,b : Int) => a + b}
     | )
  1. fold(num)(func):折叠操作,aggregate的简化操作,seqop和combop一样。
var rdd1 = sc.makeRDD(1 to 4,2)
rdd1.aggregate(1)(
     | {(x : Int,y : Int) => x + y},
     | {(a : Int,b : Int) => a + b}
     | )

rdd1.fold(1)(_+_)
  1. saveAsTextFile(path): 将数据集的元素以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本
var rdd1 = sc.makeRDD(1 to 10,2)
rdd1.saveAsTextFile("hdfs://hadoop102:9000/rdd1")
  1. countByKey():针对(K,V)类型的RDD,返回一个(K,Int)的map,表示每一个key对应的元素个数。
 val rdd = sc.parallelize(List((1,3),(1,2),(1,4),(2,3),(3,6),(3,8)),3)
 rdd.countByKey()
  1. foreach(func):在数据集的每一个元素上,运行函数func进行更新。
var rdd = sc.makeRDD(1 to 10,2)
rdd.foreach(sum+=_)
rdd.collect().foreach(println)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值