hadoop中的过滤输出

eit6fx6z  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(310)

我是hadoop的新手,还经常玩 WordCount 例子。
我遇到了一个让我困惑的问题。例如,如果我从一个文本文件中提取字数,并且我想以这样一种方式过滤它,即输出中只包含长度超过5个字母的单词,那么我是否必须运行2个作业才能完成此操作?
第一个任务是计算单词,第二个任务是过滤少于5个字母的单词?
或者我可以只把逻辑写进reducer,如果出现的次数少于5次,它就不会把单词写进结果文件?如果有多个reducer示例在运行,这会导致无效的输出吗?

bd1hkmkf

bd1hkmkf1#

简单的回答是你不需要找工作。
你可以通过一项工作来实现这一点。你在问题的最后一部分所描述的逻辑是绝对正确的。
在mapreduce框架中,与单个键相关的所有数据(值)总是传递给同一个键 Reducer . 因此,即使有多个减速机在为您的作业运行,也不会影响输出。
附言:
输出中只有超过5个字母的单词
这是你问题的第二段。我假设你的意思是一个单词出现5次而不是单词的长度。
但是你只需要长度超过5的单词,你可以过滤进去 Mapper 它自己。因此,将有更少的数据 sort-shuffle 阶段(通过网络进行数据排序和传输)和较少的数据处理 Reducer .

ecfsfe2w

ecfsfe2w2#

一个mapreduce作业就足够了。
最佳实践表明,如果可能的话,应该在mapper中过滤和投影数据。
在您的情况下,您的过滤条件仅取决于输入数据(输入字中的字符),然后您可以在Map器端过滤输入,并且只发送到包含5个以上字母的减缩字。提高工作绩效。将数据发送到reducer以删除它是没有意义的。尽管它也应该起作用。

相关问题