gpt4 book ai didi

scala - 如何在hadoop中实现OR join(scalding/cascading)

转载 作者:可可西里 更新时间:2023-11-01 14:59:35 25 4
gpt4 key购买 nike

只需将连接字段作为缩减键发送,就可以很容易地通过单键连接数据集。但是通过多个键连接记录(其中至少一个键应该相同)对我来说并不那么容易。

示例我有日志,我想按用户参数对它们进行分组,我想通过 (ipAddress, sessionId,visitorCockies) 加入它们

如果 log1.ip == log2.ip OR log1.session = log2.session OR log1.cockie = log2.coockie,那么 log1 应该与 log2 分组。也许可以创建复合键或一些概率方法,如 minHash...

这可能吗?

最佳答案

问题是 MapReduce 连接通常是通过为在某些字段上匹配的记录提供相同的归约键来实现的,以便将它们发送到同一个归约器。所以任何解决这个问题的方法都会有点麻烦,但这是可能的......

这是我的建议:对于每个输入记录,生成三个副本,每个副本都有一个新的“键”字段,该字段以它来自的字段为前缀。例如,假设您有以下输入:

(ip=1.2.3.4, session=ABC, cookie=123)
(ip=3.4.5.6, session=DEF, cookie=456)

然后你会生成

(ip=1.2.3.4, session=ABC, cookie=123, key=ip_1.2.3.4)
(ip=1.2.3.4, session=ABC, cookie=123, key=session_ABC)
(ip=1.2.3.4, session=ABC, cookie=123, key=cookie_123)
(ip=3.4.5.6, session=DEF, cookie=456, key=ip_3.4.5.6)
(ip=3.4.5.6, session=DEF, cookie=456, key=session_DEF)
(ip=3.4.5.6, session=DEF, cookie=456, key=cookie_456)

然后您可以简单地在这个新字段上分组。

我不太熟悉烫伤/级联(尽管我一直想了解更多相关信息)但这肯定符合 Hadoop 中通常执行连接的方式。

关于scala - 如何在hadoop中实现OR join(scalding/cascading),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12573675/

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