我想知道下面的映射器和化简器功能是否有问题。它是Udacity数据科学类(class)简介中项目的一部分
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
此处,值以字符串形式输入,该字符串由单词和由制表符分隔的count 1组成。两种功能的执行方式不同。我没有得到正确的输出。
最佳答案
如果您告诉我们有关您期望的输出的信息会有所帮助,但是在dic[data[0]]=data[1]
中,值data[1]
是一个字符串,因此您将无法向其添加诸如1
之类的数字。
另外,可以肯定的是,reducer的要点是,当输入计数并非总是1
时,reduce可能会运行多次,您可能想要添加实际值,而不仅仅是增加。
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
关于python - python中的Mapper和Reducer函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45368191/