GroupByKey和ReduceByKey对比

        GroupByKey和ReduceByKey两者都是spark中的Transformation算子,尽管二者通过操作可以实现相同的效果,但是二者有着很大的区别。

        在shuffle操作上,ReduceByKey会在shuffle之前发生提前聚合,这样会大量的减少落盘的数据量,提高性能与效率,在开发中也是更偏向于使用ReduceByKey.然而GroupByKey不会在分区内提前聚合,只会在发生shuffle的时候进行分组聚合,并且还要搭配mapValues()使用,将需要的操作转到mapValues()里。

        例:

                Examples:使用reduceByKey统计数值

                reduceByKey: 将数据按照value值累加(不是计数)

                 key2 = rdd3.reduceByKey(lambda x,y:x+y)

                 print(key2.collect())

                 [('b', 6), ('c', 3), ('a', 1)]

                 Examples:使用groupByKey+mapValues()统计词频个数

                groupByKey: groupByKey搭配mapValues()使用:

                >>> rdd = sc.parallelize([("a", 1), ("b", 1), ("a", 1)])

                >>> sorted(rdd.groupByKey().mapValues(len).collect())

                        [('a', 2), ('b', 1)]

                >>> sorted(rdd.groupByKey().mapValues(list).collect())

                        [('a', [1, 1]), ('b', [1])]

        

GroupBy:

ReduceBy:

        通过两张图片可知,两者的最主要的区别是否提前聚合,因为reduceByKey会提前聚合减少落盘的数据量,因此可以减少数据压力,可以使性能调优。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yangjiwei0207

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值