Hadoop对密钥进行不同的排序和分组

时间:2018-09-19 09:54:20

标签: mapreduce hadoop2 comparator

我正在计算字数,因此映射器返回键和值对

zz 1
zz 1 
b 1
c 1

和我的减速器将它们加在一起

b 1
c 1
zz 2

但是我希望按键按长度排序(递减)

zz 2
b 1
c 1

所以我为字长创建一个比较器

public static class LengthComparator extends WritableComparator {
    @Override
    @Override
    public int compare(WritableComparable a, WritableComparable b) {
        String w1 = a.toString();
        String w2 = b.toString();

        if (w1.length == w2.length) return 0;

        return w1.length() > w2.length() ? -1 : 1;
    }
}

然后设置

 job.setSortComparatorClass(LengthComparator.class);

现在我的输出是这个

 zz 2
 b 2

所以我尝试这个

public static class LengthComparator extends WritableComparator {
    @Override
    @Override
    public int compare(WritableComparable a, WritableComparable b) {
        String w1 = a.toString();
        String w2 = b.toString();

        return w1.length() > w2.length() ? -1 : 1;
    }
}

现在我的输出是

 zz 1
 zz 1
 b 1
 c 1

如何使键按键分组,但输出按单词长度排序?

0 个答案:

没有答案