Spark RDD的fold算子


fold算子签名:  def fold(zeroValue: T)(op: (T, T) => T): T ,算子其实就是先对rdd分区的每一个分区进行使用op函数,在调用op函数过程中将zeroValue参与计算,最后在对每一个分区的结果调用op函数,同理此处zeroValue再次参与计算!

此处op函数为:

    val add = (x: Int, y: Int) => {
      println(x + "\t" + y)
      x + y
    }

实战代码:

    println(sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8), 1).fold(10)(add)) //56
    println(sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8), 2).fold(10)(add)) //66
    println(sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8), 3).fold(10)(add)) //76

第一个就是一个分区,元素为:1,2,3,4,5,6,7,8 ,计算过程是现在该分区进行add求和(zeroValue参与计算),所以是1+2+3+4+5+6+7+8+10完成分区的计算,结果为46,最后在合并所有分区结果,由于只有一个分区,所以计算过程为46+10=56!


第二个两个分区:1,2,3,4和5,6,7,8两个分区,对分区分别进行计算为1+2+3+4+10=20,5+6+7+8+10=36,最后合并分区结果为20+36+10=66,

第三个同理!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值