我有一个家庭作业,我必须检索某个文档中不同单词的总数。
它与 Hadoop 提供的 WordCount 示例非常相似。但现在我只想要文档中不同单词的总数。在控制台输出中,reduce 输入组的数量对应于不同单词的总数。
有没有一种简单的方法可以在不减少数据的情况下检索这个数字。或者 Map/Reduce 不是解决这个问题的方法。链接也可能是一种解决方案,但因为作业的控制台输出中已经提供了答案,所以我想知道是否没有一种简单的方法可以在不做不需要的事情的情况下检索减少输入组的数量。
您好, Hadoop新人
最佳答案
在某些时候,您想对其进行分组,因为如果不将数据放在一起就无法检查差异性。
好吧,关于如何作弊,您是对的。作弊,我的意思是我将如何在生产环境中执行此操作,只是因为它非常简单,但无论如何感觉很脏。
在您的控制台输出中,查找“Reduce input groups=”。这会告诉您 reducer 收到了多少组。一组映射到一个键,这意味着每个唯一键都表示一次。
Reduce input groups=146030
您可以制作自己的计数器来对组进行计数,但数字将是相同的。
...然后使用 grep
或类似的东西将其拉出。
如果要抓取计数器值,也可以通过驱动中的API查询作业状态。
你的另一个选择,这显然更慢,因为它是一个额外的工作:第一阶段,做字数统计;第二阶段,做行数。
进行行计数的一般方法是发出与键相同的虚拟字符串,并为每一行发出一个 1。基本上,您的 map 函数只是 context.write(dummyText, one)
。请务必使用组合器并将 reducer 的数量设置为 1。
关于hadoop - 检索 Hadoop 中减少输入组的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380203/