我是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']
map函数如下所示:
def wordToDict(word): return {word: 1}
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
然后你可以像这样映射/减少:
reduce(countReduce, map(wordToDict, list + list2)) >>> {'a': 3, 'foobar': 1, 'b': 2, 'bar': 6, 'foo': 5}
但你也可以这样做(这是并行化会做的):
reduce(countReduce, [reduce(countReduce, map(wordToDict, list)), reduce(countReduce, map(wordToDict, list2))]) >>> {'a': 3, 'foobar': 1, 'b': 2, 'foo': 5, 'bar': 6}