“ λ ”像一个双手插兜儿,独自行走的人,有“失意、无奈、孤独”的感觉。λ 读作Lambda,是物理上的波长符号,放射学的衰变常数,线性代数中的特征值……在程序和代码的世界里,它代表了函数表达式,系统架构,以及云计算架构。

代码中的Lambda

Lambda表达式基于数学中的λ演算得名,可以看作是匿名函数,可以代替表达式,函数,闭包等,也支持类型推论,可以远离匿名内部类。

为什么使用Lambda呢?
1)代码更紧凑
2)拥有函数式编程中修改方法的能力
3)有利于多核计算

Lambda的目的是让程序员能够对程序行为进行抽象,把代码行为看作数据。

Java

Java 8的一个大亮点是引入Lambda表达式,在编写Lambda表达式时,也会随之被编译成一个函数式接口。

一个典型的例子是文件类型过滤 :

File dir = new File("/an/dir/");
FileFilter directoryFilter = new FileFilter() {
public boolean accept(File file) {
return file.isDirectory();
}
};
1
2
3
4
5
6
用lambda 重写后:

File dir = new File("/an/dir/");

File[] dirs = dir.listFiles((File f) -> f.isDirectory());
1
2
3
4
Lambda 表达式本身没有类型,因为常规类型系统没有“Lambda 表达式”这一内部概念。

Python

与其它语言不同,Python的Lambda表达式的函数体只能有唯一的一条语句,也就是返回值表达式语句。Python编程语言使用lambda来创建匿名函数。

一个典型的例子是求一个列表中所有元素的平方。

一般写法

def sq(x):
return x * x

map(sq, [y for y in range(108)])
1
2
3
4
5
使用Lambda 的写法

map( lambda x: x*x, [y for y in range(108)] )
1
2
在spark 中,用python 操作RDD时,Lambda 更是随处可见。

out_rdd = in_rdd.filter( # filter the empty record
lambda x:x[1] is not None and x[1] != {}
).map(
lambda x:utils.parse_data(x[1],es_relations)
).filter( # filter the empty record
lambda x:x is not None
).filter( # filter the record
lambda x:x[u'timestamp']>time_start)
1
2
3
4
5
6
7
8
大数据架构中的Lambda

Lambda架构的目标是设计出一个能满足实时大数据系统关键特性的架构,包括有:高容错、低延时和可扩展等。Lambda架构整合离线计算和实时计算,融合不可变性(Immunability),读写分离和复杂www.liixin66.cn性隔离等一系列架构原则,可集成Hadoop,Kafka,Storm,Spark,Hbase等各类大数据组件。
大数据Lambda 架构

Batch Layer进行预运算的作用实际上就是将大数据变小,从而有效地利用资源,改善实时查询的性能。主要功能是:

存储Master Dataset,这是一个不变的持续增长的数据集
针对这个Master Dataset进行预运算
Serving Layer就要负责对batch view进行操作,从而为最终的实时查询提供支撑。主要作用是:

对batch view的随机访问
更新batch view
speed layer与batch layer非常相似,它们之间最大的区别是前者只处理最近的数据,后者则要处理所有的数据。另一个区别是为了满足最小的延迟,speed layer并不会在同一时间读取所有的新数据,在接收到新数据时,更新realtime view,而不会像batch layer那样重新运算整个view。speed layer是一种增量的计算,而非重新运算(recomputation)。Speed Layer的作用包括:

对更新到serving layer带来的高延迟的一种补充
快速、增量的算法
最终Batch Layer会覆盖speed layer
大数据系统一般具有如下属性:
* 健壮性和容错性(Robustness和Fault Tolerance)
* 低延迟的读与更新(Low Latency reads www.wuxinvip.cn and updates)
* 可伸缩性(Scalability)
* 通用性(Generalization)
* 可扩展性(Extensibility)
* 内置查询(Ad hoc queries)
* 维护最小(Minimal maintenance)
* 可调试性(Debuggability)

个人觉得,有了spark streaming 之后,spark 本身就是一种Lambda架构。

云计算中的Lambda

云计算中的Lambda,是指serverless www.xbyl688.com architecture,无需配置或管理服务器即可运行代码。借助 Lambda,几乎可以为任何类型的应用程序或后端服务运行代码,而且全部无需管理。

以AWS 为例,云计算中的Lambda 示意流程如下:

AWS Lambda

只需上传代码,Lambda 会处理运行www.honqili66.com和扩展高可用性代码所需的一切工作。还可以将代码设置为自动从其他服务触发,或者直接从任何 Web 或移动应用程序调用。

ETL 是数据挖掘与数据分析中的必备环节,可以方便www.bsogame.com的通过AWS的Lambda实现,示例如下:
ETL 的Lambda实现

其实,在spark 上实现Lambda 云服务也不是太费力的事。

总之,了解越多,越会喜欢上它,神奇而有趣的Lambda。

代码世界中的Lambda的更多相关文章

  1. C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】

    C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...

  2. 编写高质量代码改善C#程序的157个建议——建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间

    建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间 在我们身边的世界中,对象是什么?对象就是事物,俗称“东西”.那么,什么东西算得上是一个对象呢?对象有属性.有行为.以动物为例,比 ...

  3. 编写高质量代码改善C#程序的157个建议——建议27:在查询中使用Lambda表达式

    建议27:在查询中使用Lambda表达式 LINQ实际上是基于扩展方法和Lambda表达式的.任何LINQ查询都能通过扩展方法的方式来代替. var personWithCompanyList = f ...

  4. [转]Pythoin中的Lambda表达式

    引用自:http://www.cnblogs.com/evening/archive/2012/03/29/2423554.html 在学习python的过程中,lambda的语法时常会使人感到困惑, ...

  5. 你知道C#中的Lambda表达式的演化过程吗

    你知道C#中的Lambda表达式的演化过程吗? 阅读目录 委托的使用 匿名方法 Func和Action Lambda的诞生 那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西 ...

  6. C#中的Lambda表达式和表达式树

    在C# 2.0中,通过方法组转换和匿名方法,使委托的实现得到了极大的简化.但是,匿名方法仍然有些臃肿,而且当代码中充满了匿名方法的时候,可读性可能就会受到影响.C# 3.0中出现的Lambda表达式在 ...

  7. C++11中的Lambda表达式

    原文地址:C++中的Lambda表达式 作者:果冻想 一直都在提醒自己,我是搞C++的:但是当C++11出来这么长时间了,我却没有跟着队伍走,发现很对不起自己的身份,也还好,发现自己也有段时间没有写C ...

  8. 【转】python中的lambda函数

    http://www.cnblogs.com/coderzh/archive/2010/04/30/python-cookbook-lambda.html lambda函数也叫匿名函数,即,函数没有具 ...

  9. Qt5中使用lambda表达式

    c11新特性中加入了lambda表达式,所以Qt 也支持 需在.pro文件中加入 CONFIG += c++11 例子: QString program = "C:/Windows/Syst ...

随机推荐

  1. B树,B-树,B+树,B*树

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  2. 解决@media screen (自适应)IE浏览器不兼容问题

    1.解决兼容性问题 (1)页面最顶部必须定义:<!DOCTYPE html> (2)点击:下载 respond.js 文件 (3)引入<script src="respon ...

  3. shell脚本采用crontab定时备份数据库日志

    测试服务器上才用定时脚本备份一个数据库 并打包压缩成tar避免文件过大 脚本如下: 测试服务器的shell backup_mysql.sh #!/bin/bash BASE_PATH=/alidata ...

  4. android考试题

    一.选择题 1. Math.round(11.5)等于多少(    ). Math.round(-11.5) 等于多少(   C  ). A.11 ,-11    B.11 ,-12 C.12 ,-1 ...

  5. 使用Pager-taglib进行分页

    在.net中,我们有分页控件.在java中,我们有分页标签库.他们都已经为我们封装好了,我们只需要给这几个参数:数据.当前页码.每页记录数,就能完成分页,所以他们是大同小异的. 今天来说说Pager- ...

  6. FastDFS、nginx配置手记

    第一部分   FastDFS介绍 1.FastDFS是什么 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能 ...

  7. android84 广播接受者

    #广播接收者(广播接受者进程关闭了也能接收到广播,系统会在清单文件中找哪个广播接受者可以收到这条广播,然后去启动这个接受者的进程,找不到则广播发了就发了没人收到而已) * 现实中:电台要发布消息,通过 ...

  8. 使用QEMU调试Linux内核代码

    http://blog.chinaunix.net/uid-20729583-id-1884617.html http://www.linuxidc.com/Linux/2014-08/105510. ...

  9. 随便说说removeFromSuperview方法

    之前写过一篇关于removeFromSuperview方法处理的文章,写完后一直就没怎么更新这篇文章.这两天回过头来看看,感觉这篇文章有些地方写的不够严谨,而且还有一些自己理解错的地方,所以打算重写这 ...

  10. Android开发之UI更新交互机制与实例解析

    android开发过程中,经常需要更新UI的状态和文案等.这是就需要对UI进行 更新.在android中更新UI一般有三种方法,handler机制.RunOnUiThread方法以及AsyncTask ...