0

mapreduce を使用して INNER JOIN をエミュレートすることは比較的簡単で、ジョブが完了するレデューサーで共通キーをマッピングし、値を結合します。しかし、LEFT OUTER JOIN に関して言えば、Right テーブルに存在しないキーが Left テーブルにある場合、Right テーブルの空きを埋める組み合わせの問題に直面します。一致しないキーはレデューサーにマップされると破棄されますが、これらの一致しないキーを左のテーブルから追加するにはどうすればよいですか?

たとえば、次の 2 つのファイルがあるとします。

Left = {'matches': 1}
Right = {'matches': 2,
         'matches_not': 3}

次のような出力が必要です。

Output: {'matches-matches': [1, 2],
         'matches-matches_not': [1, None]}

マッパーから共通キー 'matches' を発行しても問題はありません。Left と Right からの両方のオカレンスが共通キーでレデューサーに到達するためです。

4

1 に答える 1

1

レデューサーは、一致するレコードが存在しない場合でも、マップされたすべてのレコードを取得します。どちら側から来たかを示す各キー/値ペアにインジケーターを追加するだけです。そのインジケーターは、reduce() メソッドが各キーで扱っている正確なケースを判断するのに役立ちます。

設定方法の詳細については、参加に関する別の質問に対する私の回答を参照してください。

于 2012-12-09T22:01:24.103 に答える