一、场景
reducebykey和groupbykey作为经常使用的算子,都会触发shuffle操作
1.reducebykey返回的k-v的tuple的rdd
2.groupbykey返回的k-iterable的tuple的rdd
二、源码解读
这两个方法的底层都调用了combineByKeyWithClassTag这个方法
groupbykey 调用
reducebykey调用
第五个参数 mapSideCombine 默认是true,
reduceByKey没有对这个参数赋值所以是true,
groupbyKey对这个参数赋值了是false
mapSideCombine这个参数意思:是否进行map端的本地聚合
结论
reducebykey在map端做了本地聚合,发生shuffle的数据小一些,减少了reduce端拉取的次数和网络IO,磁盘IO,所以map阶段的聚合可以优化shuffle