Java Hadoop笛卡尔积与列表本身

Java Hadoop笛卡尔积与列表本身,java,join,hadoop,cartesian-product,Java,Join,Hadoop,Cartesian Product,使用Hadoop MapReduce 我有一个列表作为输入: A B C 我想得到列表本身的笛卡尔积: 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以简单的方式实现这一点 当然,我无法将整个输入列表保存在内存中 谢谢 您可以在Java m

使用Hadoop MapReduce

我有一个列表作为输入:

  • A
  • B
  • C
  • 我想得到列表本身的笛卡尔积:

    • 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以简单的方式实现这一点

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


    谢谢

    您可以在Java map reduce中实现它。让我们假设,您希望在两个文件A和B之间分别使用拆分3和4进行叉积。然后,您必须编写自定义输入格式来拆分两个数据集,然后确保每个数据子集都有一个拆分

    因此,您的拆分看起来像:

     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
    

    使用链接作为参考。

    您可以在Java map reduce中实现它。让我们假设,您希望在两个文件A和B之间分别使用拆分3和4进行叉积。然后,您必须编写自定义输入格式来拆分两个数据集,然后确保每个数据子集都有一个拆分

    因此,您的拆分看起来像:

     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
    

    使用link作为参考。

    嗨,Chris,当您可以在同一代码中迭代两个数组时,在Java中执行笛卡尔乘法确实很简单。然而,我需要一个Hadoop解决方案,在Hadoop中,数据是流化和分区的。谢谢你会用拉丁语吗?正如我所知,Pig使用了一种巧妙的方法来进行笛卡尔积(称为Pig中的交叉连接)。这是一种复杂的方式,所以我不建议您自己实现它。我需要直接实现它,而不使用Pig。为什么在自身上实现一个列表的连接会非常复杂呢?嗨,Chris,在Java中进行笛卡尔乘法确实很简单,因为您可以在同一代码中迭代两个数组。然而,我需要一个Hadoop解决方案,在Hadoop中,数据是流化和分区的。谢谢你会用拉丁语吗?正如我所知,Pig使用了一种巧妙的方法来进行笛卡尔积(称为Pig中的交叉连接)。这是一种复杂的方式,所以我不建议您自己实现它。我需要直接实现它,而不使用Pig。为什么在其自身上实现列表的联接会非常复杂?您能解释一下如何使用Java+MapReduce实现自定义数据集以正确分割这两个数据集吗?谢谢,这正是我想要的!:-)您能解释一下如何使用Java+MapReduce实现自定义数据集以正确分割这两个数据集吗?谢谢,这正是我想要的!:-)