mapper和reducer函数

lhcgjxsq  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(529)

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

jhdbpxl9

jhdbpxl91#

如果你能告诉我们一些你所期望的产量,那会有帮助的,但是 dic[data[0]]=data[1] 价值 data[1] 是一个字符串,因此无法添加数字,例如 1 去吧。
当然,reducer的要点是,当输入计数不一定总是正确的时候,它可能会运行多次 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

相关问题