次のように map/reduce 計算を整理できます。
マップ入力: デフォルト
マップ出力: 「キー: 数値、値: 単語」
_ キーによるソートフェーズ _
ここでは、降順でソートするようにデフォルトのソーターをオーバーライドする必要があります。
リデュース - 1 リデューサー
入力を減らす: 「キー: 数字、値: 単語」
出力を減らします:「キー: 単語、値: (数値、ランク)」
グローバル カウンターを保持します。キーと値のペアごとに、カウンターをインクリメントしてランクを追加します。
編集:これは、カスタム子孫ソーターから切り取られたコードです:
public static class IntComparator extends WritableComparator {
public IntComparator() {
super(IntWritable.class);
}
@Override
public int compare(byte[] b1, int s1, int l1,
byte[] b2, int s2, int l2) {
Integer v1 = ByteBuffer.wrap(b1, s1, l1).getInt();
Integer v2 = ByteBuffer.wrap(b2, s2, l2).getInt();
return v1.compareTo(v2) * (-1);
}
}
実際にジョブのコンパレーターとして設定することを忘れないでください:
job.setSortComparatorClass(IntComparator.class);