我想使用 Java MapReduce 在 Hadoop 中的两个数据集上执行昂贵的叉积操作。
例如,我有数据集 A 和数据集 B 中的记录,并且我希望输出中数据集 A 中的每条记录与数据集 B 中的每条记录相匹配。我意识到它的输出大小是|A| * |B|
,但还是想做。
我看到猪有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 节点开发集群上),并计算了数百万个叉积。
我还可以对算法进行改进,因为某些文档永远不会比其他文档得分高(例如,如果它们之间的时间时间太多),并因此生成更好的分割。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)