McA*_*gee 6 python cloud mapreduce
我是Python新手,
有人知道Python(和函数式语言)函数map()/ reduce()与分布式计算相关的MapReduce概念之间的关系是什么?
map/reduce的云概念非常相似,但改为并行工作.首先,每个数据对象都通过一个函数传递map给一个新对象(通常是某种字典).然后,reduce在返回的对象对上调用函数,map直到只剩下一个.这是map/reduce操作的结果.
一个重要的考虑因素是,由于并行化,reduce函数必须能够从map函数中获取对象以及从先前reduce函数中获取对象.当您考虑并行化的方式时,这会更有意义.许多机器都会将数据减少到单个对象,然后这些对象将减少到最终输出.当然,如果有大量数据,这可能发生在多个层中.
这是一个简单的示例,说明如何使用map/reduce框架计算列表中的单词:
list = ['a', 'foo', 'bar', 'foobar', 'foo', 'a', 'bar', 'bar', 'bar', 'bar', 'foo']
list2 = ['b', 'foo', 'foo', 'b', 'a', 'bar']
Run Code Online (Sandbox Code Playgroud)
map函数如下所示:
def wordToDict(word):
return {word: 1}
Run Code Online (Sandbox Code Playgroud)
reduce函数看起来像这样:
def countReduce(d1, d2):
out = d1.copy()
for key in d2:
if key in out:
out[key] += d2[key]
else:
out[key] = d2[key]
return out
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样映射/减少:
reduce(countReduce, map(wordToDict, list + list2))
>>> {'a': 3, 'foobar': 1, 'b': 2, 'bar': 6, 'foo': 5}
Run Code Online (Sandbox Code Playgroud)
但你也可以这样做(这是并行化会做的):
reduce(countReduce, [reduce(countReduce, map(wordToDict, list)), reduce(countReduce, map(wordToDict, list2))])
>>> {'a': 3, 'foobar': 1, 'b': 2, 'foo': 5, 'bar': 6}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |