2011-06-29 77 views
3

我想在java中使用hadoop實現交叉連接。連接的兩邊都足夠大,以至於我無法將它們中的任何一個留在記憶中。我已經嘗試了幾件事情,雖然我意識到PIG /蜂巢可能更容易,但我想實現它原生的Java。在hadoop中實現交叉連接

我認爲CompositeInputFormat可能是這樣做的方式,但我一直沒能找到任何示例代碼。

我試圖發送標記數據到SequenceFileInputFormat,並厭倦了使用Reducer來加入數據,但它也沒有工作。 (如果這是正確的方法,我可以提供更多細節)。

有一些示例代碼,我可以看看嗎?

回答

1

CompositeInputFormat要求通過連接鍵對這兩組數據進行排序和分區。

你可能想要做什麼你嘗試了什麼,這就是所謂的減少方連接。 Google瞭解更多信息,或查看Hadoop book中的討論。您可以使用原始數據集標記該值,並使該鍵爲連接/外鍵。在reducer中,這兩個集合在一起,你可以做任何你想做的連接行爲。

你是對的,在Pig/Hive中這樣做更簡單。豬例如:

A = LOAD ... 
B = LOAD ... 
JOINED = JOIN A BY $0, B BY $0; 
+1

aha!這本書中的例子就是我正在尋找的東西。謝謝。 –

+0

我認爲Oreilly Hadoop的書是一個很好的學習資源和參考。我強烈建議給每個使用Hadoop的人。 –

+0

我想我會拿到這本書。 –