11

MapReduce を使用して数値の平均を求めるコードを作成しようとしています。

グローバル カウンターを使用して目標を達成しようとしていますがmap、Mapper のメソッドでカウンター値を設定できずreduce、Reducer のメソッドでカウンター値を取得することもできません。

mapとにかくグローバルカウンターを使用する必要がありますか(たとえばincrCounter(key, amount)、提供された を使用してReporter)?または、いくつかの数値の平均を取得するための別のロジックを提案しますか?

4

4 に答える 4

11

ロジックは非常に単純です。すべての数値が同じキーを持つ場合、マッパーは平均を求めたいすべての値を同じキーで送信します。このため、リデューサーでは、イテレーターの値を合計できます。その後、反復子が機能する回数にカウンターを保持できます。これにより、平均化するアイテムの数の問題が解決されます。最後に、イテレータの後、合計を項目数で割ることで平均を求めることができます。

コンバイナークラスがレデューサーと同じクラスとして設定されている場合、このロジックは機能しないことに注意してください...

于 2012-05-20T07:38:39.377 に答える