我有一个MapReduce程序(用Java),它可以找到文档中的单词数,并将输出存储为:
word1 10
word2 20
...
我想知道如何在最终输出的末尾添加几行,(类似于try和catch的最后一个块),我想添加几个单词&他们的分数到最后的输出。
所以我的问题在于,是否有一种方法可以添加一段代码,该代码在执行reducer之后运行,以便我可以在整个Map&之后执行某些操作。减少完成?
答案 0 :(得分:3)
一个Reducer: 如果您有一个reducer,那么您可以使用清理中的context对象来为每个单词写入排名/分数。但要执行此操作,您需要将已写入输出文件的数据(字数)。我建议你在reduce函数中添加一个Map或其他一些对象来存储单词count。在清理中使用该Map对象来查找排名/分数,并通过上下文对象写入结果。
多个Reducer: 如果你有多个reducer,那么你只需要在main / run方法中做同样的事情。但在这种情况下,您必须读取输出文件数据,然后在附加到文件之前进行计算。我建议您使用合成器并使用上面建议的减速器来计算等级/分数。