1.1 Spark与BDAS

AMP实验室将其称为伯克利数据分析栈(Berkeley Data Analytics Stack, BDAS),

image.png
BDAS(伯克利数据分析栈)
_

1.2 Databricks

Databricks创始人团队中很多都是Spark项目的Committer,在一定程度上,该公司可以影响Spark的发展方向。

image.png
2018年6月Spark Summit
_

1.3 如何通过GitHub向Spark贡献代码

通过GitHub的Pull Request功能,向Spark贡献代码。步骤如下。

(1)Fork Spark项目到自己账号下。

(2)创建一个自己用于修改的分支。

(3)将当前的代码仓库切换到mybranch分支。

(4)修改代码。修改完成后,commit到mybranch分支。

(5)处理冲突,提交Pull Request。

如果Spark Committer认可了你的Pull Request,那么具有写权限的Committer就会将你的Pull Request合并到Spark的master分支上。

1.4 如何选择Spark编程语言

image.png
Spark开发语言对比

Java开发效率无疑是最低的,此外Python与R语言本身也支持函数式编程,但由于其执行原理是计算任务在每个节点安装的Python或R的环境中执行,结果通过管道输出给Spark Worker,因此效率要比Scala与Java低。用Spark SQL解决问题是最优选择。

1.5 函数式编程思想

函数式编程属于声明式编程,与其相对的是命令式编程,命令式编程是按照“程序是一系列改变状态的命令”来建模的一种建模风格,而函数式编程思想是“程序是表达式和变换,以数学方程的形式建立模型,并且尽可能避免可变状态”。

命令式编程将计算机程序看成动作的序列,程序运行的过程就是求解的过程,而函数式编程则是从结果入手,用户通过函数定义了从最初输入到最终输出的映射关系,从这个角度上来说,用户编写代码描述了用户的最终结果(我想要什么),而并不关心(或者说不需要关心)求解过程,因此函数式编程绝对不会去操作某个具体的值

这类似于用户编写的代码:

  1. select class_no, count(*) from student_info group by class_no;

SQL是很典型的声明式编程,用户只需要告诉SQL引擎统计每个班的人数,至于底层是怎么执行的,用户不需要关心

相对于高阶函数,函数式语言一般会提供一些低阶函数用于构建整个流程,这些低阶函数都是无副作用的,非常适合并行计算。高阶函数可以让用户专注于业务逻辑,而不需要去费心构建整个数据流。

函数式还有很多特性:

  • 没有变量
  • 低阶函数与核心数据结构
  • 惰性求值
  • 函数记忆
  • 副作用很少

函数式编程思想在Spark上的体现:

  • 函数式编程接口
  • 惰性求值
  • 容错