reduceByKey和groupByKey性能分析比较

reduceByKey相较与普通的shuffle操作一个显著的特点就是会进行map端的本地聚合,map端会先在本地的数据进行Combiner操作,然后将数据写入给下一个stage的每个task创建的文件中,也就是在map端,对每一个key对应的value,执行reduceByKey算子函数,reduceByKey算子的执行过程如图所示

使用reduceByKey对性能的提升如下:

  • 本地聚合后,在map端的数据量变少,减少了磁盘IO,也减少了对磁盘空间的占用;
  • 本地聚合后,下一个stage拉取的数据量变少,减少了网络传输的数据量;
  • 本地聚合后,在reduce端进行数据缓存的内存占用减少;
  • 本地聚合后,在reduce端进行聚合的数据量减少。

基于reduceByKey的本地聚合特征,我们应该考虑使用reduceByKey代替其他的shuffle算子,例如groupByKey。reduceByKey与groupByKey的运行原理如图所示:

                                                                                        groupByKey原理

                                                                                        reduceByKey原理

根据上图可知,groupByKey不会进行map端的聚合,而是将所有map端的数据shuffle到reduce端,然后在reduce端进行数据的聚合操作。由于reduceByKey有map端聚合的特性,使得网络传输的数据量减小,因此效率要明显高于groupByKey。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值