hadoop - MapReduce 中的叉积

标签 hadoop mapreduce

我想使用 Java MapReduce 在 Hadoop 中跨两个数据集执行叉积运算。

例如,我有来自数据集 A 和数据集 B 的记录,我希望在输出中将数据集 A 中的每条记录与数据集 B 中的每条记录相匹配。我意识到它的输出大小将是 |A| * |B|,但无论如何都想这样做。

我看到 Pig 有 CROSS但我不知道它是如何在高层实现的。也许我会去看看源代码。

不寻找任何代码,只是想从高层次上了解我应该如何解决这个问题。

最佳答案

我在查看文档相似性(将一个文档与所有其他文档进行比较)时做了类似的事情,最终得到了一个自定义输入格式,该格式拆分了两个数据集,然后确保每个数据子集都有一个“拆分” .

所以你的拆分看起来像(每个合并两组 10 条记录,输出 100 条记录)

A(1-10) x B(1-10)
A(11-20) x B(1-10)
A(21-30) x B(1-10)
A(1-10) x B(11-20)
A(11-20) x B(11-20)
A(21-30) x B(11-20)
A(1-10) x B(21-30)
A(11-20) x B(21-30)
A(21-30) x B(21-30)

虽然我不记得它的性能如何,但是有一个大小为数千的文档集来相互比较(在 8 节点开发集群上),计算了数百万个交叉产品。

我还可以改进算法,因为有些文档永远不会比其他文档得分高(例如,如果它们之间的时间间隔太长),并因此生成更好的拆分。

关于hadoop - MapReduce 中的叉积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10365948/

相关文章:

php - 如何在 PHP 上运行 Hadoop 配置单元查询

hadoop - 无法使用选择*命令查看配置单元托管表数据

java - HBase Java连接

hadoop - java.lang.RuntimeException:不是host:port对:

java - 如果中间阶段发生故障,MapReduce 如何从错误中恢复

hadoop - 色调浏览器中的WebHdfsException

java飞行记录器连接错误

Hadoop JobConf 类已弃用,需要更新示例

Hadoop总订单分区器

hadoop - 运行Mapreduce问题