python中的mapper和reducer函数

时间:2017-07-28 08:10:24

标签: python hadoop

我想知道下面的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组成的字符串。两种功能的执行方式不同。我没有得到正确的输出。

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