2013-06-29 51 views
1

名單的笛卡爾積使用Hadoop MapReduce的的Hadoop自身

我有一個列表作爲輸入:

  1. 一個
  2. Ç

而且我想得到列表的笛卡爾積:

  • A => A,F(A,A)
  • A => B,F(A,B)
  • A => C,F(A,C)
  • B => A,F(B,A)
  • B => B,F(B,B)
  • B => C,F(B,C)
  • C => A,F(C,A)
  • C => B,f(C,B)
  • C => C,f(C,C)

f()是爲一對鍵提供值的函數。

如何以簡單的方式在Java中使用Hadoop MapReduce?

當然,我無法在內存中保存整個輸入列表。

謝謝!

+0

http://stackoverflow.com/questions/1719594/iterative-cartesian-product-in-java – goat

+0

嗨Chris, 在Java中進行笛卡兒乘法的確很簡單,因爲您可以在同一代碼中迭代兩個數組。 但是,我需要一個針對Hadoop的解決方案,即數據流式傳輸和分區。 謝謝! –

+0

你可以使用豬拉丁語嗎?據我所知,Pig使用一種棘手的方式來做Cartesian產品(在Pig中稱爲交叉連接)。這是一個複雜的方式,所以我不建議你自己來實現它。 – zsxwing

回答

1

您可以在Java map reduce中實現它。讓我們假設,你想分別在分割3和4的兩個文件A和B之間交叉產品。然後,您必須編寫自定義輸入格式來分割兩個數據集,然後確保每個數據子集都有一個SPLIT。

所以,你的分裂看起來像:供您參考

A1 X B1 
A1 X B2 
A1 X B3 
A1 X B4 
A2 X B1 
A2 X B2 
A2 X B3 
A2 X B4 
A3 X B1 
A3 X B2 
A3 X B3 
A3 X B4 

使用鏈接https://github.com/adamjshook/mapreducepatterns/blob/master/MRDP/src/main/java/mrdp/ch5/CartesianProduct.java

+0

您可以請解釋* how *如何實現該自定義數據集以使用Java + MapReduce正確分離兩個數據集? –

+0

更新了帖子 – Ashish

+0

謝謝,這正是我一直在尋找的! :-) –