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