【问题标题】:Emulate LEFT JOIN with mapreduce?用 mapreduce 模拟 LEFT JOIN?
【发布时间】:2012-11-27 07:17:35
【问题描述】:

使用 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”的组合,怎么能做到减速机?

【问题讨论】:

  • 我打错了示例中的Left和Right名称,我刚刚编辑。我明白为什么您找不到名称切换的问题。谢谢,现在我看到的情况是reducer将得到“matches_not”而不是将它与“matches”分组,因此确定左外部元素的方法将告诉reducer的出现次数是否小于2,你同意吗?
  • 太好了,我现在就试试,谢谢!
  • 将我的 cmets 移至答案。

标签: mapreduce left-join


【解决方案1】:

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

有关如何设置的更多详细信息,请参阅my answer 以了解有关加入的其他问题。

【讨论】:

  • 谢谢,就这样,我必须补充一下,指标应该是值的一部分,而不是键,除非你能建议一种方法来用不同的键分组?
猜你喜欢
  • 2012-02-27
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 2015-07-14
  • 2010-09-29
  • 1970-01-01
  • 2011-10-13
相关资源
最近更新 更多