导读: 计算机科学是算法与算法变换的科学,算法是计算机科学的基石。 任何一个计算问题的分析与建模,几乎都可以归为算法问题。 MapReduce算法模型是由Google公司针对大规模群组中的海量数据处理而提出的分布编程模型,主要应用于大规模数据集{大于1TB}的分布并行运算。
在MapReduce模型中的Map{映射}和Reduce{化简}创意来自函数型编程语言,同是也继承了向量型编程语言的特性。 MapReduce模型能够使程序员在不了解分布式并行编程的情况下,将自己书写的程序在分布式系统上运行。MapReduce模型主要实现了映射与化简两个核心功能,分别由Map和Reduce完成,这两个函数也是函数型语言中常用的函数,由用户负责实现。
Map函数应用于集合中的所有成员,然后返回一个基于这个处理的结果集。而Reduce函数是从两个或更多个Map结果中,通过多个线程、进程或者独立系统并行执行处理的结果进行分类和归纳。 一个Map函数用来把对映象成一组新的键值对,Reduce函数用来对同一个键的值进行合并。
下面给大家着重介绍一下函数式编程范式,函数式编程是一种编程范式,在这种编程范式中,更多地使用了函数运算。
函数型语言与函数式编程
函数型语言是一种典型的程序设计语言。函数型语言的特点是把问题求解过程表示成块结构,对调用块的调用者来说,每个块都有输入数据和经过加工处理后的输出数据。每个块的功能就如同函数的功能,例如LISP语言、ML语言等都属于函数型语言。
利用函数型语言编程就是一种函数式编程,函数式编程使用一系列的函数解决问题。任何一个函数仅接受输入数据并产生输出函数值,不包含任何能影响产生输出的内部状态。任何情况下,使用相同的参数调用函数始终能得到一致的结果。
在一个函数式的程序中,输入数据要通过一系列的函数,每个函数根据它的输入产生输出。函数式编程位于面向对象编程的对立面。面向对象编程通常包含内部状态{字段}和许多能修改这些状态的函数,程序运行中则不断的修改状态。 函数式编程则极力避免状态改动。对于复杂的系统,可以同时使用函数式编程和面向对象编程,在这种混合应用中,既采用了面向对象技术建模,还获得了函数式编程风格的优点。
函数式编程的优点
函数式编程具有如下优点:
1,逻辑可证
由于没有边界效应,所以更容易从逻辑上证明程序正确性,而不是仅通过测试完成。
2,模块化
函数式编程以简单为原则,一个函数只做一件事,将大的功能模块拆分成尽可能小的功能模块。小的功能模块更易于阅读和检查错误。
3,组件化
更容易利用简单的小函数加以组合形成新的功能更强的函数,体现了组件化的特点。
4,易于调试
细化的、定义清晰的函数能够使得调试更加简单,当程序运行不正常时,每个函数都是检查数据是否正确的连接口,能更快速地排除没有问题的代码,定位到出现问题的地方。
5,易于测试
函数不依赖于系统状态,无须在测试前构造测试桩,更加容易编写单元测试的代码。
6,更高的生产率
函数式编程产生的代码比其他技术更简洁,往往是其他技术的一半左右,并且更容易阅读和维护。
函数式编程的特征
1,没有副作用
函数程序由一系列函数对数据的变换构成,因为函数式编程中的每个符号都是最终的,所以从来没有在某个地方修改过值,也没有函数修改过在其作用域之外的量并被其他函数使用。这表明函数求值的结果只是其返回值,而唯一影响其返回值的就是函数的参数,函数操作数据,所以函数没有产生副作用。
2,无状态的编程
在现实情况中,状态不可能一直保持不变,而状态必然需要改变与传递,那么在函数式编程中的则是将其保存在函数的参数中,作为函数的附属品来传递。
3,输入值和输出值
在函数式编程中,只有输入值和输出值。函数式基本单位,几乎被用作所有部分,包括最简单的计算,甚至连变量都被计算所取代。变量只是一个名称,而不是一个储存单元,这是函数式编程与传统的命令式编程最经典的不同之处。
在面向对象编程中,将对象传来传去。在函数式编程中,是将函数传来传去,又将这个函数称为高阶函数。在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:
@ 接受一个或多个函数作为输入。
@输出一个函数值。
好了,今天就分享到这,下次将给大家分享映射函数与化简函数,希望大家多多关注哦!对大数据感兴趣的可以加入大数据群:725197860
来源:51CTO
作者:琳达老师
链接:https://blog.51cto.com/13722730/2129870