3 つのレデューサーがあり、それぞれが同じキーを受け取る必要があります。次のようにします。
GOOG - Reducer 0
AAPL - Reducer 1
VMW - Reducer 2
パーティショナーでは、getPartition() メソッドは、(0,1,2) のいずれかのレデューサーのインデックスを示す int を返す必要があります。
私が持っている getPartition() の実装は次のとおりです。
return ((CompositeKey) key).getSymbol().hashCode() % numReduceTasks;
ただし、これはここでは機能していません。
int numReduceTasks = 3;
System.out.println("GOOG".hashCode() % numReduceTasks);//output: 0
System.out.println("AAPL".hashCode() % numReduceTasks);//output: 1
System.out.println("VMW".hashCode() % numReduceTasks);//output: 1
だから私が得る出力ファイルで
.../part-r-00000
GOOG
.../part-r-00001
AAPL
VMW
.../part-r-00002
<empty>
問題は、これをどのように修正するかです。つまり、同じキーが同じリデューサーに送られることを保証するパーティショナー関数をどのように作成すればよいでしょうか。