zoukankan      html  css  js  c++  java
  • 模拟MapReduce,Python多线程处理

    ​    MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现。用户首先创建一个Map函数处理一个基于 key/value pair的数据集合,输出中间的基于key/value pair的数据集合;然后再创建一个Reduce函数用来合并所有的具有相同中间key值的中间value值。

    模拟一个最简单的map reduce 的编程

    #### 实现一个map reduce 编程。
    #### 有一串数字作为输入。,每个数字对7取余。最后把余数相加
    import time
    mylist=[134,43,49,34,1,34,89,133,13434,379,134,4343,13434,34454,343,134]
    def surplus(mynum):
       a=mynum%7
       print a
       ### 为了观察效果,加入sleep
       time.sleep(1)
       return a
    ​
    def plus_all(mylist):
       mysum=0
       for onesurplus in map(surplus,mylist):
          mysum=mysum+onesurplus
       return mysum
    if __name__ == '__main__':
       print (plus_all(mylist))
    以上实现了 一个最简单的map reduce 变成模型,只不过map任务仍然是单线程。在map的调用替换成多任务并发即可。以下用4线程并发调起map()。futures.ProcessPoolExecutor()默认调起线程是cpu的线程数。
    #### 实现一个map reduce 编程。
    #### 有一串数字作为输入。,每个数字对7取余。最后把余数相加
    import time
    from concurrent import futures
    mylist=[134,43,49,34,1,34,89,133,13434,379,134,4343,13434,34454,343,134]
    def surplus(mynum):
       a=mynum%7
       # print(a)
       ### 为了观察效果,加入sleep
       time.sleep(1)
       return a
    ​
    ​
    def plus_all(mylist):
       mysum=0
       with futures.ProcessPoolExecutor(4) as pool:
          for onesurplus in pool.map(surplus,mylist):
             mysum=mysum+onesurplus
       return mysum
    if __name__ == '__main__':
       print (plus_all(mylist))

    总结:

    1、map reduce 编程模型,首先把一个任务分成相同处理流程的多份。编写map 函数,函数返回固定结果集,

    2、用并发线程调起map任务。处理map的所有返回结果。

  • 相关阅读:
    Fuck,什么破书
    数组指针与指针数组的问题
    .....不敢私藏,魂淡啊...游戏程序员们懂的
    毕业设计做个3D赛车游戏
    原来是这样的,所噶
    出来混,迟早都是要还的
    Struts2源码学习DefaultConfiguration的RuntimeConfigurationImpl方法(运行期改造)
    Struts2中拦截器实现AOP的原理分析
    人生的两个方向:一个是出门,一个是回家(转载)
    Struts 2框架结构图
  • 原文地址:https://www.cnblogs.com/vansky/p/12484494.html
Copyright © 2011-2022 走看看