Spark 工具包
Spark 架构
Spark应用程序由一个__驱动器进程(Drive Process)__和一组__执行器(Executors)__进程组成。
下图演示了__集群管理器(Cluster Manager)__如何控制物理机器并为Spark应用程序分配资源。
SparkSession与支持Spark API编程语言的关系
大多数情况下,Spark在每种语言中都提供了一些核心“概念”,这些概念被转化成在集群上可以运行的Spark代码。如果仅使用结构化API,则所有语言都应该具有相似的性能特征。
分布式数据分析 VS 单机数据分析
Spark的DataFrame和Python、R DataFrame的区别在于,Python DataFrame和R DataFrame存在于一台机器上(有些例外情况),而不是多台机器上。
转换操作(Transformations)
Spark的核心数据结果在计算过程中是保持不变的,着意味着他们在创建之后无法更改。
具有窄依赖关系(narrow dependency)的转换操作(窄转换)是每个输入分区仅决定一个输出分区的转换。
具有宽依赖关系(wide dependency)的转换(或宽转换)是每个输入分区决定了多个输出分区。这种宽依赖关系的转换经常被成为__Shuffle__操作,他会在整个集群中执行互相交换分区数据的功能。
一个完整的例子
从CSV文件读取数据,创建一个DataFrame。如下,CSV文件被读取到一个DataFrame里后,又被转换为一个本地数组或行列表。
例如,DataFrame的读取、排序和收集:
举例,一个DataFrame转换的完整流程
第一步:读取数据。
第二步:分组。
第三步:指定聚合操作。
第四步:简单的重命名。
第五步:对数据进行排序。
倒数第二步:指定了一个限制(limit)。
最后一步是要执行的动作。