什么是MapReduce?
MapReduce来自Hadoop, 但是却被推广到所有领域, 它的中文名叫映射规约, 这个翻译非常讲究, 也非常准确, 但是我还是想把MapReduce扩展成Filter-MapReduce, 即过滤-映射-规约 三步骤,这个思考过程对我的编程有很大帮助.
MapReduce是获取对象列表并对列表中的每个对象(即map)运行某些操作以生成新列表或计算单个值(即reduce)的过程。通过提供一个小样本可以最好地解释这个概念。
假设我们有这些数据显示一个汽车经销商在一段时间内的汽车销售情况。
(福特,福特,福特,马自达,雪佛兰,雪佛兰)
如你所见,这位汽车经销商售出3辆福特,1辆马自达和2款雪佛兰。我们想到了这一点,但计算机会分两步完成:映射然后减少。
映射步骤获取列表中的每个元素并对其运行一些操作以生成要放入新列表的新项目。由于我们想要计算汽车销售额,我们将每个项目的数字1添加到产品列表中:
((Ford,1),(Ford,1),(Ford,1),(Mazda,1),(Chevrolet,1),(Chevrolet,1))
现在我们做一个reduce操作将类似的项放在一起,然后将它们相加以产生这个:
((Ford,3),(Mazda,1),(Chevrolet,2)
现在我们可以简单地阅读制造商的汽车销售。
为什么[ 过滤--映射--规约 ]在业界迅速发展
这个相对简单的想法广泛应用于企业。其背后的软件使得解决大规模数据集的复杂问题变得更加容易,从而有助于促进其增长。
MapReduce正在迅速发展,因为Apache Hadoop和Spark并行计算系统允许程序员使用mapReduce在大型分布式数据集上运行模型,并使用高级统计和机器学习技术进行预测,查找模式,发现相关性等。
这使业务和其他组织可以运行计算:
- 确定产生最高利润的产品的价格。
- 准确了解他们的广告效果如何以及他们应该在哪里花费广告费用。
- 做长距离天气预报。
- 挖掘网络点击次数,从零售商处购买的销售记录以及Twitter趋势主题,以确定公司在即将到来的季节应该生产哪些新产品。
在mapReduce之前,进行这种计算会很困难。现在程序员可以相对轻松地解决这些问题。数据科学家已将其复杂算法编码为框架,以便常规程序员可以使用它们。公司不再需要整个博士科学家部门来建模数据,他们不需要大型超级计算机来处理大量数据,因为mapReduce运行在低成本商用机器网络上。
Ecmascript对MapReduce的支持
大数据行业提供的新理念必然渗透到了轻量级数据领域的编程语言, 比如著名的ecma就在ES6以上对Array对象的原型上提供了filter, map, reduce方法, 非常非常非常好用????
回头看下第一张图:
filter放在刚开始执行:因为过滤掉一些数据可以减少计算量,
map其后, 将列表中每个元素按照一定的规则映射成成另一个元素,
reduce是列表处理的终极大招, 遍历所有元素, 聚合成一个元素:
为啥很多人埋怨JavaScript的数组为啥没有sum和avg方法....我们明明有reduce啊啊, 自己定义一下费多大事!
mongodb对MapReduce的实现(和扩展)
大规模解决问题
什么使这成为技术突破是两件事。首先,我们可以大规模处理非结构化数据,这意味着数据不易融入关系数据库。其次,它采用数据科学的工具,让它们在分布式数据集上运行。过去,这些只能在一台计算机上运行。
mapReduce工具的相对简单性及其功能及其在商业,军事,科学和其他问题上的应用解释了为什么mapReduce增长如此之快。随着越来越多的人开始了解如何将这些工具应用于他们的情况,这种增长只会增加。