9

Java MapReduce を使用して、Hadoop の 2 つのデータ セット間でクロス積の高価な操作を実行したいと考えています。

たとえば、データ セット A とデータ セット B のレコードがあり、出力でデータ セット A の各レコードをデータ セット B の各レコードと一致させたいとします。これの出力サイズは になると思いますが|A| * |B|、とにかくやりたいです。

Pig にはCROSSあるようですが、高レベルでどのように実装されているかはわかりません。たぶん、ソースコードを見に行くでしょう。

コードを探すのではなく、この問題にどのように取り組むべきかを大まかに知りたいだけです。

4

1 に答える 1

3

ドキュメントの類似性 (ドキュメントを他のすべてのドキュメントと比較する) を見るときに同様のことを行い、最終的に 2 つのデータセットを分割するカスタム入力形式になり、データのサブセットごとに「分割」があることを確認しました。

したがって、分割は次のようになります (それぞれが 10 レコードの 2 つのセットをマージし、100 レコードを出力します)

A(1-10) x B(1-10)
A(11-20) x B(1-10)
A(21-30) x B(1-10)
A(1-10) x B(11-20)
A(11-20) x B(11-20)
A(21-30) x B(11-20)
A(1-10) x B(21-30)
A(11-20) x B(21-30)
A(21-30) x B(21-30)

パフォーマンスがどれほどだったかは覚えていませんが、(8 ノードの開発クラスターで) 互いに比較するために数千単位のサイズのドキュメント セットがあり、数百万の外積が計算されました。

また、アルゴリズムを改善することもできます。ドキュメントによっては、他のドキュメントと比べてスコアが高くない (たとえば、ドキュメント間の時間が長すぎる場合) ため、結果としてより適切な分割が生成されます。

于 2012-04-28T19:52:19.017 に答える