python - python中的Mapper和Reducer函数

标签 python hadoop

我想知道下面的映射器和化简器功能是否有问题。它是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/

相关文章:

hadoop - 我可以提交包含多个配置文件的 oozie 作业吗?

hadoop - 运行hadoop作业后生成的空输出文件

hadoop - 在多节点hadoop集群上的哪里安装Java?

python - 使用 Python 3 迭代字符串

python - Numpy 查找二维数组中出现的次数

python - 分布式 python

hadoop - 所需表缺失 : "DBS" in Catalog "" Schema ""

python - 在Python中打印xml数据?

python - 如何使用 Python 将格式化文件解析为变量?

java - maprlogin java.lang.UnsatisfiedLinkError com.mapr.security.JNISecurity.SetParsingDone()