####前言
mapreduce在我的理解里一直都是java等语言的专利,介于python乃至于pypy的性能局限,
一直没想过用python写分布式任务,最多就是多workers从消息队列取任务执行这样,但是最近一件事真的颠覆
了我对python的认识.
####先说说起因
某天分享[sed和awk](http://www.dongwm.com/archives/sed-and-
awk/),领导突发奇想让我用一些顾问的实际工作需要去我们的大量数据里面获取想要的数据的需求作为一些演示的例子.其中有这样一个需求(我去掉实际一些专业晦涩的用语,用实际的内容来表达):
需求
1 |
|
分析
一上来真的想用awk来搞.但是和其他同事一聊,有几个难点:
1 |
|
#####解题思路:
- 最初我想做成这样:
- 把需要处理的这些压缩文件放到队列里面
- 启动多进程出队列里面获取要处理的文件,执行,把符合的结果放到共享变量叠加
- 计算完成后从共享变量里面或者数据在生成上面第三条的结果
但是今天讲的是python得mapreduce,也就是我后续的版本,它源于伟大的Doug Hellmann的Implementing MapReduce
with multiprocessing
1 |
|
后话
哇,看python做mapreduce也是可以这样优雅的, 我是用pypy跑下来,竟然只有了61分钟….
但是其实他只是借助mapreduce思想和多核的硬件基础,其实pool做的还是文件级别的处理.假如是少量的大文件,就未必有这样好的效果了.
我想很多时候这样的工作都可以交给这个Admapreduce类来做
版权声明:本文由 董伟明 原创,未经作者授权禁止任何微信公众号和向掘金(juejin.im)转载,技术博客转载采用 保留署名-非商业性使用-禁止演绎 4.0-国际许可协议
python