2

現在、次の列を持つ取引のリストがあります。

TradeID, SellerID, FishType, Price, Qty

私は得るために探しています

  1. SellerIDの数
  2. FishType数量

現在、各FishTypeのQtyを合計するために< FishType , Qty > を出力するマッパーを作成しました。ただし、SellerIDのカウントを取得するには、別の mapreduce タスクを作成する必要がありますか? または、同じ mapreduce タスク内でこれを行う方法はありますか?

カウンターの使用を検討しましたが、コーディングの時点ではレコード内の SellerID が不明であり、カウンターを使用して追跡するには数が多すぎる可能性があります。私の意見では、これはカウンター機能の悪用でもあります。

ご意見をお聞かせください。

4

1 に答える 1

4

これを行う明白な方法は、別個の mapreduce ジョブを用意することです。

これを行うよりトリッキーな方法は、キーを「オーバーロード」することです。私は推測SellerIDしてFishTypeおり、両方とも文字列です。の場合は弦の前にSellerID足し、の場合は弦の前に足します。"S:"FishType"F:"

次に、レデューサーに到達すると、reduce関数の 2 つの異なるタイプの呼び出しのいずれかを取得します。それは で始まる"S:"場合は でありSellerID、もう 1 つは で始まる"F:"場合はFishTypeです。この観察に基づいて、リデューサーに別のロジックがあります。

最後に、MultipleOutputs ( .mapred.vs.バージョンに注意してください。互換性がありません) を使用して、結果を 2 つの異なるディレクトリ (1 つは for 用、もう 1.mapreduce.つは 用) に書き出します。FishTypeSellerID


これには、Pig または Hive を使用することをお勧めします。

于 2012-09-15T13:24:06.533 に答える