2017-10-15 79 views
-1

如果输入文件是量:1,1,2,2,3,4,4,4,5,5,5,5,6,6,6,然后的MapReduce的输出应为(即,该组唯一整数{1,2,3,4,5,6}的大小)。MapReduce的:给定号码的文件,输出不同的/唯一号码

我需要实施上述的帮助。我知道我们可以通过发送每个数字与map()中的空值来过滤出重复项,然后类似地将密钥与reduce()中的空值输出到结果文件/控制台。

但是如果我直接需要得到不同数字的数量,我该如何处理这个问题?

我目前的实现是建立一个Set,将它作为Mapper的输出,并且在Reducer中,将所有传递给它的集合合并,并返回结果Set的计数。请注意,这更像是一个设计问题,而不是一个特定于图书馆(比如说Hadoop)的实现问题。

+0

听起来不错。现在,代码在哪里? Stackoverflow不是代码编写服务 –

+0

添加了一些关于我所知道的内容以及我迄今为止能够理解的内容。 – Daksh

+0

为什么你需要为此减少地图缩小?具体*减少*?这是一个仅映射操作来过滤重复项并写入它们的数量 –

回答

0

使用映射器来构建Hashset。进行IntWritable和NullWritable的输出。

将所有输入值添加到设置。

写出Hashset的大小。

将Reduce Tasks的数量设置为0,因为它不是必需的。


如果您必须使用Reducer,则从映射器输出(null,value)。

和上面一样。


替代(简单)的方式存在,如果你可以使用蜂巢,猪,或Spark