一、场景

reducebykey和groupbykey作为经常使用的算子,都会触发shuffle操作

1.reducebykey返回的k-v的tuple的rdd

2.groupbykey返回的k-iterable的tuple的rdd

二、源码解读

这两个方法的底层都调用了combineByKeyWithClassTag这个方法

groupbykey 调用

spark算子reducebykey和groupbykey的对比

 

reducebykey调用spark算子reducebykey和groupbykey的对比

 

第五个参数 mapSideCombine  默认是true,

reduceByKey没有对这个参数赋值所以是true,

 groupbyKey对这个参数赋值了是false

mapSideCombine这个参数意思:是否进行map端的本地聚合

 

结论

reducebykey在map端做了本地聚合,发生shuffle的数据小一些,减少了reduce端拉取的次数和网络IO,磁盘IO,所以map阶段的聚合可以优化shuffle

相关文章: