列表的Hadoop笛卡尔积与自身

时间:2013-06-29 22:30:59

标签: java join hadoop cartesian-product

使用Hadoop MapReduce

我有一个列表作为输入:

  1. A
  2. C
  3. 我希望自己获得列表中的笛卡尔积:

    • 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以简单的方式执行此操作?

    当然我无法将整个输入列表保存在内存中。

    谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在Java map reduce中实现它。我们假设,您希望分别在两个文件A和B之间交叉产品,分别使用拆分3和4。然后你必须编写自定义输入格式来分割两个数据集,然后确保每个数据子集都有一个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作为参考。