MapReduce的二次排序

本文介绍如何在MapReduce中实现二次排序,通过构造组合中间键并定制Partitioner和分组比较器,确保归约阶段的数据按特定顺序排列。

二次排序问题是指在归约阶段对与某个键关联的值排序,有时也称为值键转换。
利用二次排序可以使归约阶段的值是有序的。

MapReduce框架对映射器生成的键排序,传入归约器的数据都是按键排序的。

利用MapReduce框架完成二次排序的方法

构造一个组合中间键(K , V) ,其中K是分区键,V是用来排序的值
此中间键做为Map的输出的键,Map的输出会按照此组合键排序;
定制Partitioner,不再以Map输出的中间键直接做哈希,而是只取组合键中的Key做哈希
这样Map的输出同样Key的数据会被分发到同一个Reducer , 而且是按照(K , V)组合键排好序的。
定制分组比较器
分发到各个Reducer中的数据的Key依然是(K,V)组合键,而数据是不应该对(K,V)组合键来做归约的,而是应该以K来做归约,为了实现以K来归约,我们需要自定义分组比较器。
分级比较器用来比较两个组合键,如果返回如果相同则在一组做归约,所以定制的分组比较器只需要比较其中的K。

代码实现,暂略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值