本文参考了《Spark SQL内核剖析》(朱峰、张韶全、黄明等著)的目录结构和内容,这本书主要集中在对SQL内核实现的剖析上,从源码实现上学习分布式计算和数据库领域的相关技术,非常值得有相关需求的专业人士学习和购买。我写这篇文章的目的也是基于此做一个关于Spark SQL的学习以及分享了一些自己的理解。
什么是Spark SQL?
Spark SQL是近年来SQL-on-Hadoop解决方案(包括Hive、Presto和Impala等)中的佼佼者,结合了数据库SQL处理和Spark分布式计算模型两个方面的技术,目标是取代传统的数据仓库。
1. Spark 基础知识
在这一节简单介绍了Spark涉及到的几个简单技术,包括RDD编程模型、DataFrame和DataSet用户接口。
1.1. RDD 编程模型
RDD是Spark的核心数据结构,全称是弹性分布式数据集(Resilient Distributed Dataset),其本质是一种分布式的内存抽象,表示一个只读的数据分区(Partition)集合。
至于RDD的创建、计算和转换等操作的原理和技术不在本文的介绍范围内,有兴趣的读者可以自行了解,我们只需要知道RDD作为弹性数据集可以很方便地支持MapReduce应用、关系型数据处理、流式数据处理和迭代性应用(图计算、机器学习等)。
1.2. DataFrame 与 DataSet
Spark在RDD的基础上,提供了DataFrame和DataSet用户编程接口,其实这两个就是数据集的封装,以方便用户通过对象方法和转换操作数据集。虽然DataFrame和DataSet也不是我们关注的重点,但我对于这两者的不同与统一比较感兴趣,所以搜集了一些资料。
Dataset可以认为是DataFrame的一个特例(有相反的说法),主要区别是