MapReduce分布编程模型之函数式编程范式

导读: 计算机科学是算法与算法变换的科学,算法是计算机科学的基石。 任何一个计算问题的分析与建模,几乎都可以归为算法问题。 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

原文地址:http://blog.51cto.com/13722730/2129870

时间: 2024-10-15 21:28:04

MapReduce分布编程模型之函数式编程范式的相关文章

[原创译书] JS函数式编程 3.建立函数式编程环境

?? Functional Programming in Javascript 主目录上一章 函数式编程基础 第三章 建立函数式编程环境 介绍 如果只是为了用函数式编程写应用,我们是否需要了解高级数学知识--类型理论.lambda演算和多态? 我们需要重新发明轮子吗?简单来说,这两个问题的答案都是:不需要. 在这章,我们将竭尽所能去调研所有会影响用Javascript编写函数式程序的方式,包括: 库 工具集 开发环境 编译成Javascript的函数式语言 更多 你要明白现在Javascript

网络编程模型及网络编程三要素

网络模型 计算机网络之间以何种规则进行通信,就是网络模型研究问题. 网络模型一般是指 OSI(Open SystemInterconnection开放系统互连)参考模型 TCP/IP参考模型 网络模型7层概述: 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后在转化为1.0,也就是我们常说的数模转换与模数转换).这一层的数据叫做比特. 2. 数据链路层:主要将从物理层接收的数

编程范式 —— 函数式编程入门

该系列会有 3 篇文章,分别介绍什么是函数式编程.剖析函数式编程库.以及函数式编程在 React 中的应用,欢迎关注我的 blog 命令式编程和声明式编程 拿泡茶这个事例进行区分命令式编程和声明式编程 命令式编程 1.烧开水(为第一人称) 2.拿个茶杯 3.放茶叶 4.冲水 声明式编程 1.给我泡杯茶(为第二人称) 举个 demo // 命令式编程 const convert = function(arr) { const result = [] for (let i = 0; i < arr.

Scala函数式编程设计原理 第一课 编程范式(Programming Paradigms)

我使用Scala有一两年的时间了,这门语言仿佛有一种魔力,让人用过就不想放手.Scala给我的整个程序生涯带来了非常深刻的影响,让我学会了函数式编程,让我知道了世界上居然还有这么一种优雅.高效.强大的语言. Scala在国外已经非常流行,但是不知为何,在国内总是不温不火,在此,我特别想为Scala这门语言在国内的发展做一些事情.不才不敢谈Scala的编程经验,因为要成为Scala大神还有很长的路要走,只好翻译一份Scala视频教程以飨读者,大家发现有误的地方,请多多批评指教. 这个视频的作者是S

如何编写高质量的 JS 函数(3) --函数式编程[理论篇]

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/EWSqZuujHIRyx8Eb2SSidQ作者:杨昆 [编写高质量函数系列]中, <如何编写高质量的 JS 函数(1) -- 敲山震虎篇>介绍了函数的执行机制,此篇将会从函数的命名.注释和鲁棒性方面,阐述如何通过 JavaScript 编写高质量的函数. <如何编写高质量的 JS 函数(2)-- 命名/注释/鲁棒篇>从函数的命名.注释和鲁棒性方面,阐述如何通过 JavaScri

Scala学习笔记(1) -- 为什么要学函数式编程

很久之前我就学过Lisp和Erlang,但是也就是写写HelloWorld,写个排序算法.也在Coursera上听过Scala的课,可是那时候我还不怎么用Java,所以后来也没怎么继续.可是对函数式编程的兴趣一直不减,工作中几乎不会用Scala,但是用的是Java,我一直在想着怎么把Scala用到工作中.最近在写一个工具,因为这个工具基本只有我们项目组用,而且很简单,所以我就用Scala写了.以后有机会,把Scala用在生产上. 为什么对函数式编程这么感兴趣呢. 第一个原因,可以装逼,或者说是个

并行计算基础&amp;amp;编程模型与工具

在当前计算机应用中,对快速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学project计算与数值模拟: 数据密集(Data-Intensive)型应用,如数字图书馆.数据仓库.数据挖掘和计算可视化等: 网络密集(Network-Intensive)型应用,如协同工作.遥控和远程医疗诊断等. 并行编程模型主要有三种:适用于共享内存的多线程编程模型.适用于分布内存的消息传递编程模型,混合编程模型. 在计算机系统中.处理

并行计算基础&amp;编程模型与工具

在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学工程计算与数值模拟: 数据密集(Data-Intensive)型应用,如数字图书馆.数据仓库.数据挖掘和计算可视化等: 网络密集(Network-Intensive)型应用,如协同工作.遥控和远程医疗诊断等. 并行编程模型主要有三种:适用于共享内存的多线程编程模型,适用于分布内存的消息传递编程模型,混合编程模型. 在计算机系统中,处理器永远都是

javascript函数式编程简单介绍

函数式编程在前端已经成为了一个热门的话题,近几年很多的应用程序代码库里大量使用着函数式编程思想.这里对JavaSctipt中的函数式编程做一个简单介绍. 什么是函数式编程 函数式编程是一种编程范式,主要是利用函数把运算过程封装起来,通过组合各种函数来计算结果.函数式编程意味着开发者可以在更短的时间内编写具有更少错误的代码. 函数式编程的简单例子 假设要把一个字符串转换成每个单词首字母大写,可以这样来实现: var string = 'i do like yanggb'; var result =