自定义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形成一个集合

第3节 mapreduce高级:8、9、自定义分区实现分组求取top1-LMLPHP

详见代码

05-23 09:48