Spark中reduceByKey、groupByKey和combineByKey的区别

在spark中,reduceByKey、groupByKey和combineByKey这三种算子用的较多,其中:

reduceByKey 用于对每个 key 对应的多个 value 进行 merge 操作,最重要的是它能够在本地先进行 merge 操作,并且 merge 操作可以通过函数自定义;
groupByKey 也是对每个 key 进行操作,但只生成一个 sequence groupByKey 本身不能自定义函数,需要先用 groupByKey 生成 RDD ,然后才能对此 RDD 通过 map 进行自定义函数操作


比较发现,使用groupByKey时,spark会将所有的键值对进行移动,不会进行局部merge,会导致集群节点之间的开销很大,导致传输延时。

CombineByKey是一个比较底层的算子,用法如下:

combineByKey(createCombiner,mergeValue,mergeCombiners,partitioner,mapSideCombine)

createCombiner:在第一次遇到Key时创建组合器函数,将RDD数据集中的V类型值转换C类型值(V => C);

mergeValue:合并值函数,再次遇到相同的Key时,将createCombinerC类型值与这次传入的V类型值合并成一个C类型值(C,V=>C

mergeCombiners:合并组合器函数,将C类型值两两合并成一个C类型值

partitioner使用已有的或自定义的分区函数,默认是HashPartitioner 

mapSideCombine是否在map端进行Combine操作,默认为true








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值