Hadoop中GroupingComparatorClass的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31246691/article/details/82156385

MapReduce的Reduce阶段的分组是按照Map阶段输出的Key来进行的,也就是Key相同就会分发到同一个Reduce中。但是今天在写一个推荐系统时遇到了这样的需求:
Map阶段输出的Key是我自定义的MyKey,它有两个字段:用户ID和其对应的推荐系数,现在有100个商品对于用户user1的推荐系数,如下:

<user1,1.0>
<user1,3.0>
<user1,2.0>
......

而在reduce阶段需要提取出推荐系数最高的前十个,所以就需要将用户ID相同的分发到同一个Reduce中,这时候就需要用到GroupingComparatorClass。下面的代码即我实现的GroupingComparatorClass。

class UserGroup extends WritableComparator{
        public UserGroup(){
            super(MyKey.class,true);
        }

        public int compare(WritableComparable a, WritableComparable b) {
            MyKey o1 =(MyKey) a;
            MyKey o2 =(MyKey) b;
            return o1.getUid().compareTo(o2.getUid());
        }
}

其中,getUid(是获取用户ID的方法),这样就可以将用户ID相同的分到同一个Reduce。
(注意:默认的构造方法必须有)

猜你喜欢

转载自blog.csdn.net/qq_31246691/article/details/82156385