4

マップ出力キーをレデューサーに逆の順序で取得するための最良の方法は何ですか? デフォルトでは、リデューサーはキーの昇順ですべてのキーを受け取ります。ヘルプやコメントは大歓迎です。

簡単に言えば、通常のシナリオでは、マップがキー1,4,3,5,2を発行する場合、リデューサーは1,2,3,4,5と同じものを受け取ります。代わりにレデューサーに5,4,3,2,1を受け取ってもらいたいです。

4

4 に答える 4

5

Hadoop 1.Xでは、を使用して出力のカスタムコンパレータクラスを指定できますJobConf.setOutputKeyComparatorClass

コンパレータはRawComparatorインターフェースを実装する必要があります。

Hadoop 2.Xでは、これはを使用Job.setSortComparatorClassして実行されますが、実装は引き続きですRawComparator

于 2012-07-26T14:04:35.270 に答える
4

サンプル、簡単なコード

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);
    }
}

次に、それをジョブに追加します

job.setSortComparatorClass(MyKeyComparator.class);

使用状況に応じて、以下のテキスト タイプを変更できます。

Text key1 = (Text) w1;
Text key2 = (Text) w2; 
于 2015-12-05T15:19:29.123 に答える