【问题标题】:Map Reduce with multiprocessingMap Reduce 与多处理
【发布时间】:2016-11-16 15:53:38
【问题描述】:
import multiprocessing

data = range(10)

def map_func(i):
    return [i]

def reduce_func(a,b):
    return a+b

p = multiprocessing.Pool(processes=4)
p.map(map_func, data)

如何使用reduce_func() 作为并行化map_func() 的reduce 函数。

这是我想要做的pySpark 示例:

rdd = sc.parallelize(data)
result = rdd.map(map_func)
final_result = result.reduce(reduce_func)

【问题讨论】:

  • functools.reduce(reduce_func, p.map(map_func, data)) 产生一个 0 到 9 的数字列表,随机性取决于多处理映射数据的顺序。

标签: python mapreduce


【解决方案1】:

根据文档,multiprocessing.Pool.map() 会阻塞,直到结果准备好。随机性是不可能的。实现随机处理顺序,使用imap_unordered()方法:

from functools import reduce

result = p.imap_unordered(map_func, data)
final_result = reduce(reduce_func, result)

# Three different runs:
# [0, 1, 4, 5, 2, 6, 8, 9, 7, 3]
# [0, 1, 4, 5, 2, 3, 8, 7, 6, 9]
# [0, 1, 2, 5, 6, 7, 8, 4, 3, 9]

【讨论】:

  • 有没有办法通过多处理来减少?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
相关资源
最近更新 更多