Spark发展
Spark API历史演变图
Dataframe和Dataset API的同意使创建向后兼容的重大改变成为可能。这是Apache Spark2.0成为主要版本。DataFrame和Dataset都属于新的Dataset API,提供了一种类型安全的面向对象的编程接口。通过将表达式和数据字段暴露给查询计划器和Project Tungsten的快速内存编码。
Spark执行过程
任何Spark应用程序都会分离主节点上的单个驱动进程(可以包含多个作业),然后将执行进程分配给多个工作结点,如下图:
驱动进程会确定任务进程的数量和组成,这些任务进程是根据为指定作业生成的图形分配给执行节点的。注意,任何工作节点都可以执行来自多个不同作业的多个任务。
Spark作业与一些列对象依赖相关联,这些依赖关系是以有向无环图(DAG)的方式组织的,例如从Spark UI生成一下示例。基于这些,Spark可以优化调度(例如确定所需的任务和工作结点数量并执行这些任务
弹性分布式数据集(RDD)
弹性分布式数据集(简称RDD)是不可变Java虚拟机(JVM)对象得分布式集合,Apache Spark就是围绕着RDD而构建的。对RDD得计算依据缓存和存储在内存中得模式进行:与其他传统分布式框架(如Apache Hadoop)相比,该模式使得计算速度快了一个数量级。
同时,RDD会给出一些细粒度得数据转换(例如map,reduce和fiter),保持Hadoop平台得灵活性和可扩展性,以执行各种各样得计算。RDD以并行方式应用和记录数据转换,从而提高了速度和容错能力。通过注册这些转换,RDD提供数据沿袭——以图形形式给出的每个中间步骤的祖先树。这实际上保护RDD免于数据丢失——如果一个RDD分区丢失,它仍然具有足够的信息来重新创建该分区,而不是简单地依赖复制。
RDD转换操作时惰性地,因为它们不立即计算其结果。只有动作执行了并且需要将结果返回给驱动程序时,才会计算转换。
DataFrame
DataFrame与RDD一样,是分布在集群地节点中地不可变地数据集合。然而与RDD不同地是,在DataFrame中,数据是以命名列地方式组织地。
DataFrame地一个主要优点是,Spark引擎一开始就构建了一个逻辑执行计划,而且执行生成地代码是基于成本优化程序确定地物理计划。与Java或者Scala相比,Python中的RDD是非常慢的,而DataFrame的引入则使性能在各种语言中都保持稳定。
SparkSession
SparkSession本质上是SparkConf、SparkContext、SQLContext和HiveContext来分别执行配置、Spark环境、SQL环境和Hive环境的各种Spark查询。SparkSession本质上是这些环境的组合,包括StreamingContext。
SparkSession现在是读取数据、处理元数据、配置会话和管理集群资源的入口
pyspark系统学习2——弹性分布式数据集