我有一个2gb的文件存储在hdfs中。文件的内容如下所示:
1 24 65 77
.... 每行一个数字。我想知道两个数字(任意两个)的总和是45使用Map减少。有人能告诉我们什么是mapper中的逻辑,什么是reducer吗?
eoigrqb61#
虽然我同意@cricket\u 007的观点,但有一种方法可以在一个mapreduce作业中使用多个mapper和reducer:在mapper中,假设 x 是原值和 y = 45 - x . 对于每个 x ,创建键为的条目 (min(x, y), max(x, y)) . 例如,如果原稿是 15 ,那么你就得 (15, 30) ,如果原件是 40 ,你应该 (5, 40) . 较小的值应该总是第一个,这样键就会适当地匹配。然后,条目的值应为 x .在reducer中,如果有两个项具有相同的键但值不同,那么就有一个匹配项,并且可以报告。因为可能存在重复项,所以您可能会发现多个条目具有相同的键和相同的值。这些应该被忽略,因为它们不符合您的要求。
x
y = 45 - x
(min(x, y), max(x, y))
15
(15, 30)
40
(5, 40)
1条答案
按热度按时间eoigrqb61#
虽然我同意@cricket\u 007的观点,但有一种方法可以在一个mapreduce作业中使用多个mapper和reducer:
在mapper中,假设
x
是原值和y = 45 - x
. 对于每个x
,创建键为的条目(min(x, y), max(x, y))
. 例如,如果原稿是15
,那么你就得(15, 30)
,如果原件是40
,你应该(5, 40)
. 较小的值应该总是第一个,这样键就会适当地匹配。然后,条目的值应为x
.在reducer中,如果有两个项具有相同的键但值不同,那么就有一个匹配项,并且可以报告。因为可能存在重复项,所以您可能会发现多个条目具有相同的键和相同的值。这些应该被忽略,因为它们不符合您的要求。