0

私はこれに参加しています。

A = Join smallTableBigEnoughForInMemory on (F1,F2) RIGHT OUTER, massive on (F1,F2);

B = Join anotherSmallTableBigforInMemory on (F1,F3 ) RIGHT OUTER, massive on (F1,F3);

どちらの結合も 1 つの共通キーを使用しているため、COGROUP を使用してデータを効率的に結合できないか疑問に思っていました。これは RIGHT 外部結合であることに注意してください。

F1 での共同グループ化については考えましたが、小さなテーブルでは単一のキーに複数の組み合わせ (200 ~ 300) があるため、単一のキーを使用した結合は使用していません。

パーティショニングは役立つと思いますが、データに偏りがあり、Pig での使用方法がわかりません

4

1 に答える 1

1

Pig のフラグメント複製結合の実装を探しています。さまざまな結合の実装の詳細については、O'Reilly の本Programming Pigを参照してください。(特に Chapter 8, Making Pig Flyを参照してください。)

フラグメント複製結合では、大きな入力の各レコードがマッパーを介してストリーミングされ、小さな入力 (完全にメモリ内にある) の任意のレコードと照合され、出力されるため、reduce フェーズは必要ありません。ただし、メモリに収まらない入力でこの種の結合を行わないように注意する必要があります。Pig はエラーを発行し、ジョブは失敗します。

Pig の実装では、大きな入力を最初に与える必要があるため、実際には左外部結合を行うことになります。「「複製された」を使用する」にタックするだけです:

A = JOIN massive BY (F1,F2) LEFT OUTER, smallTableBigEnoughForInMemory BY (F1,F2) USING 'replicated';

B の結合も同様です。

于 2012-10-18T20:38:29.303 に答える