RDD行动操作

行动操作是第二种类型的RDD操作,它们会把最终求得的结果返回到驱动器程序中,或者写入外部存储系统中。
常见的RDD行动操作:
1. reduce() :它接收一个函数作为参数,这个函数要操作两个相同的元素类型的RDD数据并返回一个同样类型的新元素。一个简单的例子就是函数+,可以用它来对我们的RDD进行累加。使用reduce课以很方便地计算出RDD中所有元素的总和,元素个数,以及其他类型的聚合操作。

scala> val sum = rdd1.reduce((x,y)=> x + y)
sum: Int = 3

2.fold()和 reduce()类似,接收一个与reduce()接受的函数签名相同的函数,再加上一个“初始值”来作为每个分区的第一次调用时的结果。
def fold(zeroValue: T)(op: (T, T) ⇒ T): T
有初始值的叠加:

scala> rdd2.collect
res12: Array[Int] = Array(2, 3)

scala> rdd2.fold(3)((x,y)=>x+y)
res15: Int = 11

执行步骤:

3 + 2= 5
3 + 3 = 6
6+5 = 11
3.aggregate()函数把我们从返回值类型必须与所操作的RDD类型相同的限制解放出来。与fold()类似,使用aggregate()函数时需要提供我们期待返回的类型的初始值。然后通过一个RDD中的元素合并起来放入累加器。

def aggregate[U](zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)(implicit arg0: ClassTag[U]): U

aggregate用户聚合RDD中的元素,先使用seqOp将RDD中每个分区中的T类型元素聚合成U类型,再使用combOp将之前每个分区聚合后的U类型聚合成U类型,特别注意seqOp和combOp都会使用zeroValue的值,zeroValue的类型为U。
与fold不同的是:计算出来的两个不同的值可以用不相同的计算方法计算。

scala> val rdd1 = sc.makeRDD(1 to 10,1)
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[31] at makeRDD at <console>:24

scala> rdd1.aggregate(1)((_+_),(_+_))
res18: Int = 57

scala> val rdd1 = sc.makeRDD(1 to 10,2)
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[32] at makeRDD at <console>:24

scala> rdd1.aggregate(1)((_+_),(_+_))
res19: Int = 58

scala> val rdd1 = sc.makeRDD(1 to 10,3)
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[33] at makeRDD at <console>:24

scala> rdd1.aggregate(1)((_+_),(_+_))
res20: Int = 59

计算不同的分区得到的1到10的累加和,注意,每次每个分区计算和最后合并时都会用到初始值。
take(n)
在RDD操作中有一个take(n)操作,返回RDD中的n个元素,并且尝试只访问尽量少的分区,因此该操作会得到一个不均衡的集合。
top()
从RDD中获取前几个元素。top()从RDD中获取前几个元素。top会使用数据的默认顺序,但我们也可以提供自己的比较函数,来提取前几个元素。
takeSample(witheReplacement,num,[seed])函数可以让我们从数据中获取一个采样。red.takeSample(false,1)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值