2012-10-02 22 views
0

我有這個加入。如何使用cogroup加入

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

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

由於兩個連接使用一個公共密鑰,我想知道如果協同組可用於有效地接合的數據。請注意這是一個右外連接。

我的確在考慮F1上的cogrouping,但是小表在單個鍵上有多個組合(200-300),所以我沒有使用單鍵使用聯接。

我覺得劃分可以幫助,但數據有偏差和我不知道如何在豬

回答

1

您正在尋找豬的實施片段重複連接使用它。有關不同聯接實現的更多詳細信息,請參閱O'Reilly書籍Programming Pig。 (特別參見第8章,使豬蠅。)

在片段複製加入,沒有降低是必需的階段,因爲大的輸入的每個記錄是通過映射器流,具有的任何記錄匹配了小輸入(完全在內存中)和輸出。但是,您必須小心,不要使用不適合內存的輸入進行這種連接 - Pig會發出錯誤並且作業將失敗。

在Pig的實現中,必須先給出大的輸入,所以你實際上會做一個左外連接。只需粘貼「使用」複製「」:

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

B的連接將類似。