MapReduce:给定一个数字文件,输出不同/唯一数字的数量

时间:2017-10-15 18:35:08

标签: hadoop count mapreduce distinct

如果输入文件是:1,1,2,2,3,4,4,4,5,5,5,5,6,6,6,则MapReduce的输出应为 6 (即唯一整数集{1,2,3,4,5,6}的大小)。

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

但如果我直接需要获得不同数字的数量,我将如何解决这个问题呢?

我当前的实现是构建一个Set,将它作为Mapper的输出传递,并在Reducer中,组合传递给它的所有Sets,并返回该结果Set的计数。请注意,这更像是一个设计问题,而不是特定于库的(例如,Hadoop)实现问题。

1 个答案:

答案 0 :(得分:0)

使用映射器构建Hashset。输出IntWritable和NullWritable。

将所有输入值添加到Set。

写出Hashset的大小。

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

如果必须使用Reducer,请从mapper输出(null,value)。

与上述相同。

如果您可以使用Hive,Pig或Spark

,则存在替代(更简单)的方法