gpt4 book ai didi

hadoop - 如何用hadoop实现自连接/叉积?

转载 作者:可可西里 更新时间:2023-11-01 14:21:16 26 4
gpt4 key购买 nike

对项目对进行一些评估是常见的任务:示例:重复数据删除、协同过滤、相似项目等这基本上是具有相同数据源的自连接或叉积。

最佳答案

要进行自连接,您可以遵循“减少端连接”模式。映射器发出连接/外键作为键,记录作为值。

那么,假设我们想对以下数据的“城市”(中间列)进行自连接:

don,baltimore,12
jerry,boston,19
bob,baltimore,99
cameron,baltimore,13
james,seattle,1
peter,seattle,2

映射器会发出键->值对:

(baltimore -> don,12)
(boston -> jerry,19)
(baltimore -> bob,99)
(baltimore -> cameron,13)
(seattle -> james,1)
(seattle -> peter,2)

在 reducer 中,我们会得到这个:

(baltimore -> [(don,12), (bob,99), (cameron,13)])
(boston -> [(jerry,19)])
(seattle -> [(james,1), (peter,2)])

如果您愿意,您可以从这里执行内部连接逻辑。为此,您只需将每个项目与其他所有项目进行匹配。为此,将数据加载到数组列表中,然后对项目执行 N x N 循环以相互比较。

意识到减少端连接的成本很高。如果您不过滤任何内容,它们会将几乎所有数据发送到 reducer。此外,在将数据加载到 reducer 的内存中时要小心——您可能会通过将所有数据加载到数组列表中来破坏热连接键上的堆。


以上与典型的 reduce-side join 有点不同。连接两个数据集时的思路是一样的:外键是键,记录是值。唯一的区别是这些值可能来自两个或多个数据集。您可以使用 MultipleInputs让不同的映射器解析不同的输入集,然后让缩减器从两者收集数据。


在没有任何约束的情况下,叉积是一场噩梦。即,

select * from tablea, tableb;

有很多方法可以做到这一点。它们都不是特别有效。如果您想要这种行为,请给我留言,我会花更多时间解释实现此目的的方法。

如果您能找出某种连接键,这是相似性的基本键,那么您的情况会好得多。


我书的插件:MapReduce Design Patterns .它应该会在几个月内发布,但如果您真的感兴趣,我可以通过电子邮件将有关联接的章节发送给您。

关于hadoop - 如何用hadoop实现自连接/叉积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11066434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com