3

map reduce を使用して機能を実装する必要があります。

要件は後述します。

  1. マッパーの入力は、productId と Salescount の 2 つの列を含むファイルです。
  2. レデューサー出力、salescount の合計

要件は、salescount / sum(salescount) を計算する必要があることです。

このために、ネストされた map reduce を使用する予定です。しかし、2 番目のマッパーでは、最初のレデューサーの出力と最初のマップの入力を使用する必要があります。

どうすればこれを実装できますか。または別の方法はありますか?

よろしくヴィヌ

4

2 に答える 2

0

ユースケースが手元にあるので、これを達成するために 2 つの異なるマッパー/mapreduce ジョブは必要ないと思います。(上記のコメントで与えられた答えの延長として)

HDFS で複数のブロックに分割された非常に大きな入力ファイルがあるとします。このファイルを入力として MapReduce ジョブをトリガーすると、複数のマッパー (入力ブロックの数に等しい) が並行して実行を開始します。

マッパーの実装では、入力から各行を読み取り、productId をキーとして、saleCount を値としてコンテキストに書き込みます。このデータは Reducer に渡されます。

MR ジョブでは、同じキーを持つすべてのデータが同じレデューサーに渡されることがわかっています。これで、レデューサーの実装で、特定の productId のすべての salesCounts の合計を計算できます。

注: 分子の値「salescount」についてはわかりません。

特定の製品の出現回数のカウントであると仮定すると、カウンターを使用して、SUM(saleCount) を計算している同じ for ループで合計販売数を追加して取得してください。だから、私たちは持っています

totalCount -> 商品の発生回数 sumSaleCount -> 各商品の saleCount 値の合計。

これで、上記の値を直接割ることができます: totalCount/sumSaleCount。

お役に立てれば!別のユースケースを念頭に置いている場合はお知らせください。

于 2016-05-31T18:20:42.907 に答える