一、认识SparkSQL
1.1 什么是SparkSQL
spark SQL是spark的一个模块,主要用于进行结构化数据的处理。它提供的最核心的编程抽象就是DataFrame。
1.2 SparkSQL的作用
提供一个编程抽象(DataFrame) 并且作为分布式 SQL 查询引擎
1.3 运行原理
将 Spark SQL 转化为 RDD, 然后提交到集群执行
1.4 特点
(1)容易整合
(2)统一的数据访问方式
(3)兼容 Hive
(4)标准的数据连接
1.5 SparkSession
SparkSession封装了SparkConf、SparkContext和SQLContext
1.6 DataFrames
DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格,DataFrame所表示的二维表数据集的每一列都带有名称和类型。RDD,由于无从得知所存数据元素的具体内部结构,Spark Core只能在stage层面进行简单、通用的流水线优化。
DataFrame:它可以根据很多源进行构建,包括:结构化的数据文件,hive中的表,外部的关系型数据库,以及RDD
二、RDD转换成为DataFrame
方式一:通过 RDD转换 DataFrames
方式二:通过 structType 或者 case class 创建 DataFrames(编程接口)
方式三:通过 数据源文件创建 DataFrames
三、RDD vs DataFrames vs DataSet
3.1 RDD
RDD是一个懒执行的不可变并行数据集合。
3.2 DataFrames
DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息。
Spark框架本身不了解数据集的内部结构,而DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame多了数据的结构信息的schema。
3.3 Dataset
1、Dataframe是Dataset的特列
2、样例类被用来在Dataset中定义数据的结构信息,样例类中每个属性的名称直接映射到DataSet中的字段名称
3、DataFrame只是知道字段,但是不知道字段的类型,DataSet不仅仅知道字段,而且知道字段类型
四、Spark SQL 的运行原理
Spark SQL对SQL语句的处理和关系型数据库类似,即词法/语法解析、绑定、优化、执行。Spark SQL会先将SQL语句解析成一棵树,然后使用规则(Rule)对Tree进行绑定、优化等处理过程。