ユースケースが手元にあるので、これを達成するために 2 つの異なるマッパー/mapreduce ジョブは必要ないと思います。(上記のコメントで与えられた答えの延長として)
HDFS で複数のブロックに分割された非常に大きな入力ファイルがあるとします。このファイルを入力として MapReduce ジョブをトリガーすると、複数のマッパー (入力ブロックの数に等しい) が並行して実行を開始します。
マッパーの実装では、入力から各行を読み取り、productId をキーとして、saleCount を値としてコンテキストに書き込みます。このデータは Reducer に渡されます。
MR ジョブでは、同じキーを持つすべてのデータが同じレデューサーに渡されることがわかっています。これで、レデューサーの実装で、特定の productId のすべての salesCounts の合計を計算できます。
注: 分子の値「salescount」についてはわかりません。
特定の製品の出現回数のカウントであると仮定すると、カウンターを使用して、SUM(saleCount) を計算している同じ for ループで合計販売数を追加して取得してください。だから、私たちは持っています
totalCount -> 商品の発生回数 sumSaleCount -> 各商品の saleCount 値の合計。
これで、上記の値を直接割ることができます: totalCount/sumSaleCount。
お役に立てれば!別のユースケースを念頭に置いている場合はお知らせください。