首先,我不确定是否可能。如果有可能,我仍然不确定这是否是正确的做法。
我拥有的是:
我想要的是:
我遇到的问题是:
如果连接键上的两个文件之间存在多对多关系,我如何在Java上使用Hadoop Mapreduce执行此操作?
从下图中可以看出,对于a1 = x,A有4个匹配的行,对于b1 = x,B有2个匹配的行。因此,在a1 = b1 = x上连接两个表会产生4 * 2 = 8行(组合),如最后一个表所示。使用reduce连接,我无法做到这一点,因为这意味着增加了与MapReduce本质相反的键和值对。
我该如何表演?
为什么会出现问题:
我们说表A是:
a1 a2 a3 a4
x 1 somevalue somevalue
x 2 somevalue somevalue
x 3 somevalue somevalue
x 4 somevalue somevalue
我们说表B是:
b1 b2 b3 b4 b5
x i somevalue somevalue somevalue
x j somevalue somevalue somevalue
在a1 = b1上加入两个文件的结果:
a1 a2 b2
x 1 i
x 2 i
x 3 i
x 4 i
x 1 j
x 2 j
x 3 j
x 4 j
答案 0 :(得分:0)
完整联接将始终为每个键生成M x N
输出值。
请注意,使用reduce侧连接时,映射器发出的中间键对的数量仍为N + M
,并且它是执行笛卡尔积的缩减器。所以没有错。由于您控制了减速器,因此您可以进一步过滤并仅输出所需的内容。