1

使用 Hadoop MapReduce

我有一个列表作为输入:

  1. 一种
  2. 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 以简单的方式做到这一点?

当然,我不能将整个输入列表保存在内存中。

谢谢!!

4

1 回答 1

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供您参考。

于 2013-07-01T10:21:38.470 回答