如果输入文件是: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)实现问题。
答案 0 :(得分:0)
使用映射器构建Hashset。输出IntWritable和NullWritable。
将所有输入值添加到Set。
写出Hashset的大小。
将Reduce Tasks的数量设置为0,因为它不需要。
如果必须使用Reducer,请从mapper输出(null,value)。
与上述相同。
如果您可以使用Hive,Pig或Spark
,则存在替代(更简单)的方法