接着上一篇
MapReduce-三次排序-曾经想不通的二次排序把其实例的需求改变一下,来说明如何定制GroupingComparatorClass和SortComparatorClass
下面就完成这篇博客要完成的问题
测试数据如下:
id,name,cost
1,mr1,3234
2,mr2,123
3,mr3,9877
4,mr4,348
5,mr5,12345
6,mr6,6646
7,mr7,98
8,mr8,12345
1,mr1,334
2,mr2,3123
3,mr3,97
4,mr4,231
5,mr5,122
6,mr6,3455
7,mr7,1222
8,mr8,12345
4,mr4,123
达到的效果:
找出每个用户的消费情况并从高到低排序
mr1 3234,334
mr2 3123,123
mr3 9877,97
mr4 348,231,123
mr5 12345,122
mr6 6646,3455
mr7 1222,98
下面就完成这篇博客要完成的问题
测试数据如下:
id,name,cost
1,mr1,3234
2,mr2,123
3,mr3,9877
4,mr4,348
5,mr5,12345
6,mr6,6646
7,mr7,98
8,mr8,12345
1,mr1,334
2,mr2,3123
3,mr3,97
4,mr4,231
5,mr5,122
6,mr6,3455
7,mr7,1222
8,mr8,12345
4,mr4,123
达到的效果:
找出每个用户的消费情况并从高到低排序
mr1 3234,334
mr2 3123,123
mr3 9877,97
mr4 348,231,123
mr5 12345,122
mr6 6646,3455
mr7 1222,98
mr8 12345,12345
自定义步骤:
1.如何自定义key比较函数类。这是key的第二次比较。这是一个比较器,需要继承WritableComparator。
public static class SortComparator extends WritableComparator
必须有一个构造函数,并且重载 public int compare(WritableComparable w1, WritableComparable w2)
另一种方法是 实现接口RawComparator。
在job中设置使用setSortComparatorClass。
2.如何自定义分组函数类。
在reduce阶段,构造一个key对应的value迭代器的时候,只要first相同就属于同一个组,放在一个value迭代器。这是一个比较器,需要继承WritableComparator。
public static class GroupingComparator ext