我有一项家庭作业,其中我必须检索某个文档中不同单词的总数。
它与Hadoop提供的WordCount示例非常相似。但现在我只想要文档中不同单词的总数。在控制台输出中,减少输入组的数量对应于不同单词的总数。
有没有一种简单的方法可以在不减少数据的情况下检索这个数字。或者Map/Reduce不是解决这个问题的方法。链接也可能是一种解决方案,但由于答案已经在作业的控制台输出中提供,我想知道是否有一种简单的方法可以在不做不需要的事情的情况下检索减少输入组的数量。
问候,Hadoop新人
在某些情况下,您需要对其进行分组,因为如果不将数据组合在一起,就无法检查其清晰度。
好吧,你怎么作弊是对的。我所说的欺骗,是指我在生产环境中会如何做到这一点,只是因为它有多简单,但无论如何都感觉很肮脏。
在控制台输出中,查找"Reduce input groups="。这告诉你的减速器收到了多少组。一个组映射到一个键,这意味着每个唯一的键都表示一次。
Reduce input groups=146030
你可以制作自己的计数器来计算组数,但数量是一样的。
然后使用grep
或类似的东西将其拉出。
如果您想获取计数器值,还可以通过驱动程序中的API查询作业状态。
你的另一个选择,显然较慢,因为这是一项额外的工作:第一阶段,进行字数统计;第二阶段,进行行计数。
进行行计数的一般方法是发出与键相同的伪字符串,并为每行发出1。基本上,您的映射函数仅为context.write(dummyText, one)
。一定要使用组合器,并将减速器的数量设置为1。