2012-02-21 14 views
2

我有一个家庭作业分配,其中必须检索某个文档中不同单词的总数。检索Hadoop中缩减输入组的数量

这与Hadoop提供的WordCount示例非常相似。但是现在我只想要文档中不同单词的总数。在控制台输出中,减少输入组的数量对应于不同单词的总数。

有没有简单的方法来检索这个数字,甚至没有减少数据。或者Map/Reduce不是解决这个问题的方法。链接也可以是一个解决方案,但是因为答案已经在作业的控制台输出中提供了,所以我想知道是否没有简单的方法来检索减少输入组的数量而不做不需要的东西。

问候, Hadoop的新人

回答

1

在某些时候,你希望将它,因为没有办法检查清晰度不使数据一起。


那么,你是正确的如何作弊作弊。而通过作弊,我的意思是我怎么会在生产环境中这样做,只是因为它有多简单,但无论如何感觉很脏。

在您的控制台输出中,查找“减少输入组=”。这告诉你你的减员收到了多少组。一个组映射到一个密钥,这意味着每个唯一密钥只代表一次。

Reduce input groups=146030 

你可以让自己的计数器来计数组,但数字是相同的。

...然后使用grep或类似的东西来推出它。

如果要获取计数器值,还可以通过驱动程序中的API查询作业状态。


你的其他选择,这显然是慢,因为它是一个额外的工作:第一阶段,做的字数;第二阶段,做线计数。

执行行数的一般方法是为每个行发出与密钥相同的虚拟字符串和1。基本上,您的地图功能完全是context.write(dummyText, one)。请务必使用组合器并将缩减器的数量设置为1.

+0

感谢您的输入我现在使用“减少输入组”计数器的值。这可以通过使用'Job'实例'job.getCounters()。findCounter(“org.apache.hadoop.mapred.Task $ Counter”,“REDUCE_INPUT_GROUPS”)''的以下方法找到。我使用Hadoop 1.0.0 – roelio 2012-02-22 11:51:16