美文网首页
MapReduce计算实例

MapReduce计算实例

作者: saviola1127 | 来源:发表于2018-09-02 16:51 被阅读0次

    今天闲来无事,发现很久之前机器上还有hadoop的安装文件,于是来尝试一下MapReduce的例子,顺便来考验一下自己曾经失去的python开发经验 :(

    例子是一串输入 "a b c d a b c",所谓Map和Reduce,其实是两个计算过程,第一个过程就是map,它用来拆分任务,罗列详细统计结果,代码如下:

    import sys
    
    def read_input(file):
        for line in file:
            yield line.split()
    
    def main():
        data = read_input(sys.stdin)
    
        for words in data:
            for word in words:
                print("%s%s%d"%(word, '\t', 1)) #按照一定的格式统计每一个字符出现的次数,可以重复
    
    if __name__ == '__main__':
        main()
    

    在python解释器中尝试一下

    [training@localhost training_materials]$ echo "a b c d a b c" | python2.7 hdfs_map.py
    a   1
    b   1
    c   1
    d   1
    a   1
    b   1
    c   1
    

    于是再来讨论第二个过程,reduce就是把结果分组进行汇总,得到最终的统计结果!

    import sys
    from operator import itemgetter
    from itertools import groupby
    
    def read_mapper_output(file, separator='\t'):
        for line in file:
            yield line.rstrip().split(separator, 1)
    
    def main():
        data = read_mapper_output(sys.stdin)
    
        for current_word, group in groupby(data, itemgetter(0)): #分组统计
            total_count = sum(int(count) for current_word, count in group)
    
            print ("%s%s%d"%(current_word, '\t', total_count))
    
    if __name__ == '__main__':
        main()
    

    再次运行来看结果吧!

    [training@localhost training_materials]$ echo "a b c d a b c" | python2.7 hdfs_map.py | sort -k1,1 | python2.7 hdfs_reduce.py
    a   2
    b   2
    c   2
    d   1
    

    顺便要说一下yield的概念,这个其实是一个迭代器,用来在迭代过程之中记录next记录的优化方案!

    相关文章

      网友评论

          本文标题:MapReduce计算实例

          本文链接:https://www.haomeiwen.com/subject/bopmwftx.html