反向排序归约键

Aru*_*A K 4 java hadoop mapreduce bigdata

以相反的顺序将Map Output键映射到化简器的最佳方法是什么?默认情况下,Reducer以键的升序接收所有键。任何帮助或意见广受赞赏。

用简单的话来说,在正常情况下,如果映射发出密钥1,4,3,5,2,则reducer会收到与1,2,3,4,5相同的密钥。我希望减速器改为接收5,4,3,2,1

Woo*_*kai 5

在Hadoop 1.X中,您可以使用来为输出指定一个自定义比较器类JobConf.setOutputKeyComparatorClass

比较器必须实现RawComparator接口

对于Hadoop 2.X,这是通过使用Job.setSortComparatorClass,仍然使用的实现来完成的RawComparator


use*_*372 5

示例,简单的代码

class MyKeyComparator extends WritableComparator {
    protected DescendingKeyComparator() {
        super(Text.class, true);
    }

    @SuppressWarnings("rawtypes")
    @Override
    public int compare(WritableComparable w1, WritableComparable w2) {
        Text key1 = (Text) w1;
        Text key2 = (Text) w2;          
        return -1 * key1.compareTo(key2);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将其添加到作业中

job.setSortComparatorClass(MyKeyComparator.class);
Run Code Online (Sandbox Code Playgroud)

您可以根据您的使用更改以下文本类型。

Text key1 = (Text) w1;
Text key2 = (Text) w2; 
Run Code Online (Sandbox Code Playgroud)