groupByKey、reduceByKey、aggregateByKey、foldByKey、combineByKey的联系和区别

groupByKey根据key对value进行分组,默认没有预聚合

combineByKeyWithClassTag[CompactBuffer[V]](
      createCombiner, mergeValue, mergeCombiners, partitioner, mapSideCombine = false)

 

reduceByKey分区内和分区间的计算逻辑一致,第一个Key的值不做任何计算,直接返回,在分区内和第二个key的值做计算

combineByKeyWithClassTag[V]((v: V) => v, func, func, partitioner)

 

aggregateByKey分区内和内区间的计算逻辑可以不同,第一个key的值和初始值做分区内计算

combineByKeyWithClassTag[U]((v: V) => cleanedSeqOp(createZero(), v),
      cleanedSeqOp, combOp, partitioner)

 

foldByKey分区内和分区间的逻辑一致,第一个key的值和初始值做分区内计算

combineByKeyWithClassTag[V]((v: V) => cleanedFunc(createZero(), v),
      cleanedFunc, cleanedFunc, partitioner)

 

combineByKey分区内和内区间的计算逻辑可以不同,对分区内第一个key的value进行格式转换

combineByKeyWithClassTag(createCombiner, mergeValue, mergeCombiners,
      partitioner, mapSideCombine, serializer)(null)

 

总之:这五个方法底层调的是同一个方法,只不过是参数不同而已!

posted on 2022-08-10 16:48  吴玉川  阅读(198)  评论(0编辑  收藏  举报