2011-09-21 55 views

回答

12

沒有主要的性能差異。我這樣說的原因是他們最終都是一個單一的MapReduce作業,它將相同的數據發送給reducer。兩者都需要將所有記錄向前發送,其中密鑰是外鍵。如果有的話,COGROUP可能會更快一些,因爲它不會將笛卡爾產品穿過命中並將其保存在單獨的袋子中。

如果其中一個數據集很小,則可以使用名爲"replicated join"的聯接選項。這將在所有地圖任務中分配第二個數據集並將其加載到主內存中。這樣,它可以在映射器中完成整個連接,而不需要還原器。根據我的經驗,這是非常值得的,因爲連接和組合的瓶頸在於將整個數據集轉移到還原器。就我所知,你不能用COGROUP來做到這一點。

+0

在內部,join和cogroup在Pig中是一樣的(並且沒有在連接中進行笛卡爾連接,不確定你的意思)。只有最終結果的格式會根據您使用的關鍵字而變化。嘗試「描述」加入的結果 - 您會在解釋計劃中看到COGROUP運算符。 – SquareCog

+0

我的意思是笛卡爾積,如果外鍵有多個匹配,你會得到更多的記錄。例如,如果一個數據集中有3個「abcde」,然後是第二個數據集中的4個「abcde」,則它會輸出12個記錄,因爲它們會匹配每個記錄。與此同時,在COGROUP,它保持關係獨立。 –