2016-06-15 13 views
1

私はいくつかの処理を行い、関連するカウントを持つcity:fruitの複合キー(WritableComparableを実装)を生成します。今、私は、果物の種類ごとに最高の数を持つ都市を決定する第二のmapreduceの仕事でそれをチェーンしたいと思います。compositekeyとsortによるJava Mapreduceグループ

のMapReduceジョブ1からのサンプル複合キー出力:

+---------------------+-------+ 
| city:fruit composite| count | 
+---------------------+-------+ 
| london:apples  | 3  | 
+---------------------+-------+ 
| london:bannanas  | 2  | 
+---------------------+-------+ 
| london:oranges  | 15 | 
+---------------------+-------+ 
| charleston:apples | 20 | 
+---------------------+-------+ 
| charleston:bannanas | 1  | 
+---------------------+-------+ 
| charleston:oranges | 3  | 
+---------------------+-------+ 
| chicago:bannanas | 17 | 
+---------------------+-------+ 
| chicago:apples  | 5  | 
+---------------------+-------+ 
| chicago:oranges  | 11 | 
+---------------------+-------+ 

ジョブ2から所望の出力:

+------------+----------+ 
| city  | fruit | 
+------------+----------+ 
| london  | oranges | 
+------------+----------+ 
| charleston | apples | 
+------------+----------+ 
| chicago | bannanas | 
+------------+----------+ 

私はこれを実現するにはどうすればよいですか?私のSQLの考え方では、複合キーは2つの列、1つは都市、もう1つは果物です。私はフルーツでグループ化し、並べ替えて、最も高い数の列をつかむ。私はそれがmapreduceの世界にどのように翻訳されるのか理解できません。何かアドバイスをいただければ幸いです!すべてのあなたが持って減らす段階で

  • を数える:

  • 答えて

    1

    プロセス

    1. は仕事を減らす
    2. がキーと果物の複合値として街にあなたの情報を分割し、新たなマップにデータを読みます現在の都市の価値。これでループ内のすべての値を繰り返し処理できます。それらを分割し、最大の果実数と果実を覚えています。
    3. は今、データベースにデータを書き込んだり、HDFS

    は、各減速のために別々のファイルが書き込まれていることに注意してください。その後、HDFS機能で簡単にマージすることができます。ただ1つの減速機しか持たない可能性もありますが、私はそれがスケーラブルではないのでこのようには好きではありませんでした。

    +0

    これはまさに正解でした。ありがとう!減速機に送る前にfuit:countコンポジットをソートする方法はありますか? – ph34r

    +1

    はい、これはもう少し書くだけです。新しい質問をしてください。あなたがここにリンクを提供すれば、私はそれに答えようとします。 –

    +1

    しかし、あなたにヒントを与えるために、SecondaryOrderingはあなたが検索したいキーワードです。これはマップフェーズではソートされませんが、還元フェーズの前に –

    関連する問題