【发布时间】:2017-03-27 22:37:05
【问题描述】:
所以,我一直在关注本网站 (http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/) 上的 Mapreduce python 代码,它从文本文件中返回字数(即单词和它在文本中出现的次数)。但是,我想知道如何返回最大出现的单词。 mapper和reducer如下——
#Mapper
import sys
# input comes from STDIN (standard input)
for line in sys.stdin:
# remove leading and trailing whitespace
line = line.strip()
# split the line into words
words = line.split()
# increase counters
for word in words:
# write the results to STDOUT (standard output);
# what we output here will be the input for the
# Reduce step, i.e. the input for reducer.py
#
# tab-delimited; the trivial word count is 1
print '%s\t%s' % (word, 1)
#Reducer
from operator import itemgetter
import sys
current_word = None
current_count = 0
word = None
# input comes from STDIN
for line in sys.stdin:
# remove leading and trailing whitespace
line = line.strip()
# parse the input we got from mapper.py
word, count = line.split('\t', 1)
# convert count (currently a string) to int
try:
count = int(count)
except ValueError:
# count was not a number, so silently
# ignore/discard this line
continue
# this IF-switch only works because Hadoop sorts map output
# by key (here: word) before it is passed to the reducer
if current_word == word:
current_count += count
else:
if current_word:
# write result to STDOUT
print '%s\t%s' % (current_word, current_count)
current_count = count
current_word = word
# do not forget to output the last word if needed!
if current_word == word:
print '%s\t%s' % (current_word, current_count)
所以,我知道我需要在减速器的末尾添加一些东西,但我只是不完全确定是什么。
【问题讨论】:
-
所以你只是想找到计数最多的单词并输出它?
-
没错。计数最多的单词以及计数本身。
-
我猜是在reducer的最后加了一点代码,但是我试过了,没有用。
标签: python hadoop mapreduce hadoop-streaming