注:分区排序(默认的分区规则,区内有序)
GroupingComparator是mapreduce当中reduce端的一个功能组件,主要的作用是决定哪些数据作为一组,调用一次reduce的逻辑,默认是每个不同的key,作为多个不同的组,每个组调用一次reduce逻辑,我们可以自定义GroupingComparator实现不同的key作为同一个组,调用一次reduce逻辑。
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 | 232.8 |
需要求出每一个订单中成交金额最大的一笔交易。
2、实现思路
Mapper
- 读取一行文本数据,切分出每个字段;
- 订单id和金额封装为一个Bean对象,Bean对象的排序规则指定为先按照订单Id排序,订单Id相等再按照金额降序排;
- map()方法输出kv;key-->bean对象,value-->NullWritable.get();
Shuffle
- 指定分区器,保证相同订单id的数据去往同个分区(自定义分区器)
- 指定GroupingComparator,分组规则指定只要订单Id相等则认为属于同一组;
Reduce
- 每个reduce()方法写出一组key的第一个 </