2011-06-30 7 views
2

私はまだ地図の周りに私の脳をラップしようとしています。私は1つのカテゴリに属する​​記事の集まりを持っており、各記事には一連のキーワードがあります。マップタグの数を減らした日付とカテゴリ

{ 
    author: "kris", 
    category: "mongodb", 
    content: "...", 
    keywords: [ "keyword1", "keyword2", "keyword3" ], 
    created_at: "..." 
} 

私は基本的に作者の点で、すべての文書のキーワードのカウントから引くしたいので、私のようなもので終わる:

{ 
    author: "kris", 
    categories: { 
    mongodb: { keyword1: 5, keyword2: 3, keyword3: 1 }, 
    ruby: { ... }, 
    python: { ... } 
    } 
} 

任意の入力文書は次のようになりますと仮定すると、これは非常に高く評価されます。

ありがとうございます!

答えて

2

ああ、私はあなたの質問でどれくらい興奮していますか?これは実際に私の分散システムクラスのための私の最後の任務の一部だったので、私の最近の卒業した心の中で非常に新鮮です。

解析の詳細については、私はGoogle ApacheのHadoopチュートリアルだけですが、一般的な概要を説明します。

基本的に、この問題には2つのマップリダクションフェーズが必要です。最初のマップでは、あなたの入力は<filename, {list of keywords}>のキーと値のペアのリストでなければなりません(あなたのファイルにはlil前処理が必要かもしれませんが、大したものはありません)。これらのペアごとに、減算器に渡すペアとして<keyword, 1>を出力します(基本的にはすべての単語を1回カウントする必要があります)。

最初の短縮パスでは、以前のキーと値のペアが簡略化されて、各キーワードが<keyword, {1,1,1,1,1,1}>の形式の独自のペアを持つように簡便に圧縮されます。ドキュメント。つまり、1と出力すると<keyword, sum>となります。

最終的なマップ/削減フェーズは、キーワードの値で並べ替えるだけです。地図:<keyword,sum> --> <sum,keyword> Reduce: <sum, {keywords}> --> <keyword,sum>。これは、map-reduceがreduceフェーズに移行するときにキーでソートするという事実を利用しています。

ここで、すべてのキーワードは、ソート順に単語数の隣にあります。

関連する問題