hadoop - 检索 Hadoop 中减少输入组的数量

标签 hadoop mapreduce

我有一个家庭作业,我必须检索某个文档中不同单词的总数。

它与 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/

相关文章:

hadoop - MapReduce作业获取avro文件并输出序列文件时出错

hadoop - 主从系统的OS版本

hadoop - 错误: Jobflow entered COMPLETED while waiting to ssh

hadoop - 在单节点集群上运行 Hadoop 示例时出错

mysql - Hive 查询在启 Action 业并生成跟踪 URL 后不会开始 MapReduce 进程

java - 无法使用带有查询过滤器的数据存储输入来执行 app engine-mapreduce

hadoop - 使用Hive SQL将数据导出到CSV

hadoop - Map 输出格式与 hadoop 中的 reduce 输出格式不同

java - map 缩小 : Unabale to run the code due to number of errors

parallel-processing - MongoDB:在没有并行性的情况下使用 MapReduce 有什么意义?