0

使用 mapreduce 模拟 INNER JOIN 是相对简单的,在完成工作的 reducer 中映射公共键和连接值。但是当涉及到 LEFT OUTER JOIN 时,当左表中的键不存在于右表中时,就会面临组合填充右表的空缺的问题。映射到reducer时将丢弃不匹配的键,然后如何从左表中添加这些不匹配的键?

例如,假设我们有两个文件:

Left = {'matches': 1}
Right = {'matches': 2,
         'matches_not': 3}

有人会想要这样的输出:

Output: {'matches-matches': [1, 2],
         'matches-matches_not': [1, None]}

从映射器发出公用键“匹配”没有问题,因为左和右的出现都会使用公用键到达减速器,但是如果它从未到达减速器,如何获得“matches_not”的组合?

4

1 回答 1

1

即使匹配的记录不存在,reducer 也会映射所有记录。您只需为每个键/值对添加一个指示符,显示它来自哪一侧。该指标将帮助您的 reduce() 方法确定您为每个键处理的确切情况。

有关如何设置的更多详细信息,请参阅对有关加入的不同问题的回答。

于 2012-12-09T22:01:24.103 回答