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)
总之:这五个方法底层调的是同一个方法,只不过是参数不同而已!