spark 算子之 reduceByKey与groupByKey的区别


补充:reduceByKey与groupByKey的区别? 
[优化代码的最基本思路]
(1)当采用reduceByKeyt时,Spark可以在每个分区移动数据之前将待输出数据与一个共用的key结合。
借助下图可以理解在reduceByKey里究竟发生了什么。 
注意在数据对被搬移前同一机器上同样的key是怎样被组合的(reduceByKey中的lamdba函数)。
然后lamdba函数在每个区上被再次调用来将所有值reduce成一个最终结果。
整个过程如下:



(2)当采用groupByKey时,由于它不接收函数,spark只能先将所有的键值对(key-value pair)都移动,

        这样的后果是集群节点之间的开销很大,导致传输延时。

  整个过程如下:



因此,在对大数据进行复杂计算时,reduceByKey优于groupByKey。
另外,如果仅仅是group处理,那么以下函数应该优先于 groupByKey :
  (1)combineByKey 组合数据,但是组合之后的数据类型与输入时值的类型不一样。
  (2)foldByKey合并每一个 key 的所有值,在级联函数和“零值”中使用。





















































补充:reduceByKey与groupByKey的区别? 
[优化代码的最基本思路]
(1)当采用reduceByKeyt时,Spark可以在每个分区移动数据之前将待输出数据与一个共用的key结合。
借助下图可以理解在reduceByKey里究竟发生了什么。 
注意在数据对被搬移前同一机器上同样的key是怎样被组合的(reduceByKey中的lamdba函数)。
然后lamdba函数在每个区上被再次调用来将所有值reduce成一个最终结果。
整个过程如下:



(2)当采用groupByKey时,由于它不接收函数,spark只能先将所有的键值对(key-value pair)都移动,

        这样的后果是集群节点之间的开销很大,导致传输延时。

  整个过程如下:



因此,在对大数据进行复杂计算时,reduceByKey优于groupByKey。
另外,如果仅仅是group处理,那么以下函数应该优先于 groupByKey :
  (1)combineByKey 组合数据,但是组合之后的数据类型与输入时值的类型不一样。
  (2)foldByKey合并每一个 key 的所有值,在级联函数和“零值”中使用。
















































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值