自定义GroupingComparator求取topN
GroupingComparator是mapreduce当中reduce端的一个功能组件,主要的作用是决定哪些数据作为一组,调用一次reduce的逻辑,默认是每个不同的key,作为多个不同的组,每个组调用一次reduce逻辑,我们可以自定义GroupingComparator实现不同的key作为同一个组,调用一次reduce逻辑
3.1 需求
有如下订单数据
订单id
商品id
成交金额
Order_0000001
Pdt_01
222.8
Order_0000001
Pdt_05
25.8
Order_0000002
Pdt_03
522.8
Order_0000002
Pdt_04
122.4
Order_0000002
Pdt_05
722.4
Order_0000003
Pdt_01
222.8
现在需要求出每一个订单中成交金额最大的一笔交易
3.2 分析
1、利用“订单id和成交金额”作为key,可以将map阶段读取到的所有订单数据按照id分区,按照金额排序,发送到reduce
2、在reduce端利用groupingcomparator将订单id相同的kv聚合成组,然后取第一个即是最大值
分组求取topN:第一个问题:订单id相同的数据,一定要发送到同一个reduce里面去
分区与分组的区别:
分区:决定了我们的数据去到哪一个reduce里面去分组:决定了我们一个reduce内部的数据,哪些作为一个集合 相同key的数据对应的value形成一个集合
详见代码
转载于:https://www.cnblogs.com/mediocreWorld/p/11041136.html