我想知道下面的mapper和reducer函数是否有问题。它是Udacity数据科学课程入门项目的一部分
def mapper():
dic={}
for line in sys.stdin:
data=line.strip().split(" ")
for i in data:
dic[i]=1
for key, value in dic.iteritems():
print key,'\t', value
这里的值以字符串形式输入,单词由空格分隔,函数返回一个字典,字符串的每个单词都作为“键”,它将1作为“值”。
def reducer():
dic={}
for line in sys.stdin:
data=line.strip().split('\t')
if data[0] in dic.keys():
dic[data[0]]+=1
else:
dic[data[0]]=data[1]
for key, value in dic.iteritems():
print key,'\t',value
这里的值被输入为由单词和由标签分隔的计数1组成的字符串。两种功能的执行方式不同。我没有得到正确的输出。
答案 0 :(得分:0)
如果您告诉我们您期望的输出信息会有所帮助,但在dic[data[0]]=data[1]
data[1]
中,值1
是一个字符串,因此您将无法添加{{1对它来说。
另外,减速器的关键在于,当输入计数不总是1
时,它可能会运行多次,您可能希望添加实际值而不是仅增加。
def reducer():
dic=collections.defaultdict(int)
for line in sys.stdin:
key, value=line.strip().split('\t')
dic[key] += int(value)
for key, value in dic.iteritems():
print key,'\t',value