当前位置:  开发笔记 > 编程语言 > 正文

python map reduce和cloud-computing map/reduce之间的关系?

如何解决《pythonmapreduce和cloud-computingmap/reduce之间的关系?》经验,为你挑选了1个好方法。

我是Python新手,

有人知道Python(和函数式语言)函数map()/ reduce()与分布式计算相关的MapReduce概念之间的关系是什么?



1> Aaron Dufour..:

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}

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有