Spark算子[09]:aggregateByKey、aggregate详解

aggregateByKey

aggregateByKey的用法同combineByKey,针对combineByKey的三个参数:

createCombiner: V => C,mergeValue: (C, V) => C,mergeCombiners: (C, C) => C

将createCombiner: V => C替换成一个初始值 C ,相当于aggregateByKey的三个参数为:

zeroValue: C,mergeValue: (C, V) => C,mergeCombiners: (C, C) => C

注意—>>:
需要注意的是,zeroValue这个值一般要求置为,0、“”、Nil。
因为最终的合并结果和分区个数有关。
mergeValue是针对每一个分区进行合并,每个分区都会调用一下初始值zeroValue;
如果初始值zeroValue非空,会导致最终合并每一个分区的值:mergeCombiners的合并结果不同。

源码

/**
  * 底层同样调用的是 combineByKeyWithClassTag
  */
def aggregateByKey[U: ClassTag](zeroValue: U, partitioner: Partitioner)(seqOp: (U, V) => U,
    combOp: (U, U) => U): RDD[(K, U)] = self.withScope {
   

    ...

  combineByKeyWithClassTag[U]((v: V) => cleanedSeqOp(createZero(), v),
    cleanedSeqOp, combOp, partitioner)
}
def aggregateByKey[U](zeroValue: U)(seqOp: (U, V) => U, combOp: (U, U) => U): RDD[(K, U)]

def aggregateByKey[U](zeroValue: U, numPartitions: Int)(seqOp: (U, V) => U, combOp: (U, U) => U): RDD[(K, U)]

def aggregateByKey[U](zeroValue: U, partitioner: Partitioner)(seqOp: (U, V) => U, combOp: (U, U) => U): RDD[(K, U)]

案例同combineByKey

请参考:Spark算子[08]:combineByKey详解


Scala实战案例

/***/
def avgScore(): Unit = {
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命不息丶折腾不止

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值