Spark核心RDD:foldByKey函数详解

  • foldByKey(zeroValue: V, numPartitions: Int)(func: (V, V) => V): RDD[(K, V)]
  • foldByKey(zeroValue: V)(func: (V, V) => V): RDD[(K, V)]
  • foldByKey(zeroValue: V, partitioner: Partitioner)(func: (V, V) => V): RDD[(K, V)]
foldByKey操作作用于RDD[K,V]根据K将V做折叠、合并处理,其中的参数zeroValue表示先根据映射函数将zeroValue应用与V,进行初始化V,在将映射函数应用于初始化后的V。
scala> val rdd1 = sc.makeRDD(Array(
     |       ("A", 1), ("A", 2), ("B", 1), ("B", 2), ("C", 1)
     |     ))
rdd1: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[12] at makeRDD at <console>:24

scala> /**
     |       * rdd1中每个key对应的V进行累加,注意zeroValue=0,需要先初始化V,映射函数为+操作
     |       * 比如,("A", 1), ("A", 2),先将zeroValue应用于每个V,得到("A", 1+0), ("A", 2+),
     |       * 即,("A", 1), ("A", 2),在将映射函数应用于初始化后的V,最后得到("A", 1+@), ("A", 3)
     |       */
     |     rdd1.foldByKey(0)(_+_).collect()
res14: Array[(String, Int)] = Array((B,3), (A,3), (C,1))

//映射函数为乘法时,zeroValue需设置成1
    rdd1.foldByKey(1)(_*_).collect

res16: Array[(String, Int)] = Array((B,2), (A,2), (C,1))


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值