问题是MapReduce连接通常是通过给某些字段上匹配的记录使用相同的reduce键来实现的,以便它们被发送到同一个reducer。因此,任何解决这个问题的方法都会有些破绽,但这是可能的...
下面是我会推荐的:对于每个输入记录,生成三个副本,每个副本都带有一个新的“键”字段以来自它的字段为前缀。因此,例如,说你有以下输入:
(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中通常如何进行连接。
这样,我会得到3个不同的重叠群(每个键repectivelly相等),所以我需要一种方法将它们合并到单个组 – yura
@yura如果左记录可以与多个正确的记录,然后加入通常是加入会让他们没有参与(如此重复的价值)。原因是合并会导致未定义的元组大小(表格宽度),您可能会得到1,2或3个正确的记录。因此这个解决方案是正确的,(但缺乏细节和基本的实现;)。 – samthebest