4

アイテムのペアで何らかの評価を行うのは一般的なタスクです。例: 重複除外、協調フィルタリング、類似アイテムなど これは基本的に、同じデータ ソースとの自己結合または交差積です。

4

2 に答える 2

7

自己結合を行うには、「縮小側結合」パターンに従うことができます。マッパーは、結合/外部キーをキーとして発行し、レコードを値として発行します。

したがって、次のデータの「都市」(中央の列) で自己結合を実行したいとします。

don,baltimore,12
jerry,boston,19
bob,baltimore,99
cameron,baltimore,13
james,seattle,1
peter,seattle,2

マッパーはキーと値のペアを発行します。

(baltimore -> don,12)
(boston -> jerry,19)
(baltimore -> bob,99)
(baltimore -> cameron,13)
(seattle -> james,1)
(seattle -> peter,2)

レデューサーでは、これを取得します。

(baltimore -> [(don,12), (bob,99), (cameron,13)])
(boston -> [(jerry,19)])
(seattle -> [(james,1), (peter,2)])

ここから、必要に応じて内部結合ロジックを実行できます。これを行うには、すべてのアイテムを他のすべてのアイテムと一致させるだけです。これを行うには、データを配列リストにロードし、項目を N x N ループして相互に比較します。

reduce-side join はコストがかかることを認識してください。何も除外しない場合、ほとんどすべてのデータがレデューサーに送信されます。また、データをレデューサーのメモリにロードする際にも注意してください。配列リスト内のすべてのデータをロードすることで、ホット ジョイン キーのヒープを吹き飛ばしてしまう可能性があります。


上記は、通常の reduce-side join とは少し異なります。2 つのデータ セットを結合する場合も考え方は同じです。外部キーがキーで、レコードが値です。唯一の違いは、値が 2 つ以上のデータ セットから取得される可能性があることです。を使用MultipleInputsして、さまざまなマッパーにさまざまな入力セットを解析させ、リデューサーに両方からデータを収集させることができます。


制約がない場合の外積は悪夢です。すなわち、

select * from tablea, tableb;

これを行うにはいくつかの方法があります。それらのどれも特に効率的ではありません。この種の動作が必要な場合は、コメントを残してください。これを行う方法を説明するために、さらに時間を費やします。

類似性の基本的なキーである何らかの結合キーを見つけ出すことができれば、はるかに良い結果が得られます。


私の本のプラグイン: MapReduce Design Patterns。数か月以内に公開される予定ですが、本当に興味がある場合は、結合に関する章をメールでお送りできます。

于 2012-06-18T12:55:32.847 に答える
0

一般に、レデューサーを使用して、結合に必要なロジックを実行します。秘訣は、データセットを 2 回マップすることです。値にマーカーを追加して、どちらの実行かを示すことができます。その場合、自己結合は他の種類の結合と同じです。

于 2012-06-17T01:43:06.857 に答える