Hadoop 使用mapreduce查找两个和为45的数字

Hadoop 使用mapreduce查找两个和为45的数字,hadoop,mapreduce,Hadoop,Mapreduce,我有一个2GB的文件存储在HDFS中。该文件的内容如下所示: 1 24 65 77 。。。。 每行一个数字。我想知道两个数字(任意两个)的总和是45使用地图减少 有人能告诉我mapper中的逻辑应该是什么,reducer应该是什么吗?虽然我同意@cricket\u 007的观点,但有一种方法可以在一个MapReduce作业中使用多个mapper和reducer: 在映射器中,假设x是原始值,并且y=45-x。对于每个x,创建一个键为(最小(x,y),最大(x,y))的条目。例如,如果原件是15

我有一个2GB的文件存储在HDFS中。该文件的内容如下所示:

1
24
65
77
。。。。 每行一个数字。我想知道两个数字(任意两个)的总和是45使用地图减少


有人能告诉我mapper中的逻辑应该是什么,reducer应该是什么吗?

虽然我同意@cricket\u 007的观点,但有一种方法可以在一个MapReduce作业中使用多个mapper和reducer:

在映射器中,假设
x
是原始值,并且
y=45-x
。对于每个
x
,创建一个键为
(最小(x,y),最大(x,y))
的条目。例如,如果原件是
15
,那么您将拥有
(15,30)
,而如果原件是
40
,您将拥有
(5,40)
。较小的值应始终位于第一位,因此键将适当匹配。然后,条目的值应为
x


在reducer中,如果有两个项具有相同的键但值不同,则有一个匹配项,并且可以报告。由于可能存在重复项,您可能会发现多个条目具有相同的键和相同的值。这些应该被忽略,因为它们不符合您的要求。

2G的数据不足以证明使用Hadoop是合理的。。。编写和使用在单个文件上运行的算法可能比安装Hadoop和编写mapreduce更快。。。在任何情况下,您都必须将整个文件读入一个减速机,因为您必须将每个数字与所有其他数字进行比较。如果没有数字是负数,那么映射器所能做的最好的事情就是过滤掉45以上的所有值。我刚刚举了一个2gb的例子,它也可能是巨大的。我主要关心的是如何编写MapReduce逻辑来高效地完成它。正如您所说,我们必须在一个减速机中加载完整的数据,我同意这一点,但是有没有更好的方法使用多个减速机(为了并行性)来实现这一点,这是我所不知道的。每个块的大小将限制为128Mb。假设您在第一个块中没有找到两个数字,那么您必须使用第一个块中的所有数字扫描第二个(以及以后的)块。您正在寻找的解决方案不适用于分治算法。您的意思是说,我们不能针对此类问题运行map reduce作业,对吗?我不是这么说的。我能想到的唯一算法就是使用mapreduce不会比在一台机器上运行同一进程更有效。强制性参考