转载自知乎:https://zhuanlan.zhihu.com/p/370857623
1、原理层面的区别
groupByKey 不会在map端进行combine,而reduceByKey 会在map端的默认开启combine进行本地聚合。
在map端先进行一次聚合,很极大的减小reduce端的压力,一般来说,map的机器数量是远大于reduce的机器数量的。通过map聚合的方式可以把计算压力平均到各台机器,最终在reduce端只需要汇总map端聚合完成的数据即可,极大的提高效率。
看图如下:
reduceByKey
2、实战层面
主要说一下,自己在什么场景下使用groupByKey,使用的时候造成了什么问题,然后换到reduceByKey之后效率提升多少。
比如:(具体时间自己找一批数据跑一波就可以得出结论,根据实际跑的时间和数据量描述即可)
groupByKey 在计算每个用户请求次数的时候(数据量级30亿,用户量级3亿),使用groupByKey运行1个小时(甚至执行失败,reduce机器报内存溢出),换用reduceByKey之后,很好的解决了这个问题,从之前的1小时,缩短到了10分钟。