我有2GB的文件存储在HDFS中。该文件的内容如下:
1
24
65
77
... 每行一个数字。我想知道使用map reduce的两个数(任意两个)的总和为45。
谁能说出mapper中的逻辑是什么,以及reducer中的逻辑是什么?
答案 0 :(得分:1)
尽管我同意@ cricket_007的关注,但您可以通过一种方法在一个MapReduce工作中使用多个映射器和化简器来做到这一点:
在映射器中,假设x
是原始值,y = 45 - x
。为每个x
创建一个键为(min(x, y), max(x, y))
的条目。因此,例如,如果原始文件为15
,则您将拥有(15, 30)
,而如果原始文件为40
,则您将拥有(5, 40)
。较小的值应始终是第一个,因此键将适当匹配。条目的值应为x
。
在化简器中,如果您有两个具有相同键但值不同的条目,则您具有一个匹配项并可以报告。由于可能存在重复项,因此您可能会发现多个具有相同键和相同值的条目。这些应该被忽略,因为它们不符合您的要求。