当前位置:  开发笔记 > 大数据 > 正文

MapReduce与函数式编程中map-reduce组合的区别

如何解决《MapReduce与函数式编程中map-reduce组合的区别》经验,为你挑选了1个好方法。

我在http://en.wikipedia.org/wiki/MapReduce上阅读了mapreduce ,理解了如何在许多"文档"中获取"单词"计数的示例.但是我不明白以下几行:

因此,MapReduce框架将(键,值)对列表转换为值列表.此行为与函数式编程映射和reduce组合不同,后者接受任意值列表并返回组合map返回的所有值的单个值.

有人可以再次详细说明差异(MapReduce框架VS地图和减少组合)?特别是,减少函数式编程有什么作用?

非常感谢.



1> Michał Marcz..:

主要区别在于MapReduce显然具有可专利性.(对不起自己,对不起......)

更严重的是,正如我记得的那样,MapReduce论文描述了一种以大规模并行方式执行计算的方法.这种方法建立在多年前众所周知的map/reduce结构之上,但超出了分发数据等问题的范围.此外,对由上述函数操作和返回的数据结构施加了一些限制.该map样和reduce样件计算(约数据的键/值对的列表来的东西),所以你可能会说,MapReduce的是一个巨大的平行度友好专业化的的mapreduce组合.

至于维基百科对功能编程map/ reduce构造中映射的函数的评论,每个输入产生一个值......好吧,确实如此,但是这里对所述值的类型没有任何约束.特别是,它可能是一个复杂的数据结构,可能是您再次应用map/ reduce转换的事物列表.回到"计算单词"的例子,你可以很好地拥有一个函数,对于给定的文本部分,它产生一个数据结构,将单词映射到出现计数,map而不是文档(或大块文档,视情况而定) be)和reduce结果.

事实上,这正是Phil Hagelberg 在本文中所发生的事情.这是一个有趣和Clojure中与实现MapReduce的字计数样计算的超级简短的例子map和一些等同于reduce(该(apply + (merge-with ...))位- merge-with在以下方面实现reduce在clojure.core).这与维基百科示例的唯一区别在于,被计数的对象是URL而不是任意单词 - 除此之外,您还有一个用MapReduce风格实现的计数单词算法.它可能不完全符合MapReduce实例的原因是没有涉及的工作负载的复杂分布.这一切都发生在一个盒子上......虽然在盒子提供的所有CPU上.mapreduce

对于reduce功能的深入处理- 也称为fold- 参见Graham Hutton的关于折叠的普遍性和表现力的教程.它是基于Haskell的,但即使你不懂语言也应该是可读的,只要你愿意在你去的时候查找一两个Haskell的东西......就像++=列表连接,没有深入的Haskell魔法.

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