视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python实现mapreduce模式的例子
2020-11-27 14:27:54 责编:小采
文档


MapReduce是一种从函数式编程语言借鉴过来的模式,在某些场景下,它可以极大地简化代码。先看一下什么是MapReduce:

MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。概念“Map(映射)”和“Reduce(归纳)”,及他们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语言借来的特性。
当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归纳)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
简单来说,MapReduce就是把待处理的问题分解为Map和Reduce两个部分。而待处理的数据作为一个序列,每一个序列里的数据通过Map的函数进行运算,再通过Reduce的函数进行聚合成最终的结果。

下面使用mapreduce模式实现了一个简单的统计日志中单词出现次数的程序:

from functools import reduce
from multiprocessing import Pool
from collections import Counter

def read_inputs(file):
 for line in file:
 line = line.strip()
 yield line.split()

def count(file_name):
 file = open(file_name)
 lines = read_inputs(file)
 c = Counter()
 for words in lines:
 for word in words:
 c[word] += 1
 return c

def do_task():
 job_list = ['log.txt'] * 10000
 pool = Pool(8)
 return reduce(lambda x, y: x+y, pool.map(count, job_list))

if __name__ == "__main__":
 rv = do_task()

下载本文
显示全文
专题