Spark算子之fold()和aggregate()的解释

RDD算子其他的都比较好理解,唯独fold和agg这俩稍微比较难理解一点,因为scala语言这个语法个人感觉有点异于其他语言。

先说说reduce()函数,他和fold()函数也就一个初始值的区别:

val rdd=list1.parallelize(List(1,2,3,4))

rdd.reduce((x,y)=>x+y)

其实就是 1+2+3+4 返回10 ,x其实指代的就是返回值,y是对rdd元素的遍历。意思是对 l中的数据进行累加。

对与fold()函数来说:

rdd.fold(0)((x,y)=>x+y)

这个计算其实 0 + 1 + 2 + 3 + 4.

reduce()fold()返回值的数据类型必须和rdd是一样的。aggregate()函数就打破了这个限制。比如我返回(Int, Int)

2. rdd.aggregate(value)(seqOp, combOp)

要算平均值,我就有两个值是要求的,一个是rdd的各元素的累加和,另一个是元素计数,我初始化为(0, 0)

rdd.aggregate(0, 0)(seqOp, combOp)

seqOp是:(x, y) => (x._1 + y, x._2 + 1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值