Java Hadoop笛卡尔积与列表本身
使用Hadoop MapReduce 我有一个列表作为输入: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
- 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)
谢谢 您可以在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实现自定义数据集以正确分割这两个数据集吗?谢谢,这正是我想要的!:-)