1. 了解什么是Spark SQL
Spark SQL是Spark多种组件中其中一个, 主要是用于处理大规模的结构化数据
什么是结构化数据:
一份数据集, 每一行都是有固定的列, 每一列的类型都是一致的, 我们将这种数据集称为结构化的数据
例如: MySQL表数据
1 张三 20
2 李四 18
3 王五 21
为什么要学习Spark SQL呢?
1- 会SQL的人, 一定比会大数据的人多
2- Spark SQL既可以编写SQL语句, 也可以编写代码, 甚至支持混合使用
3- Spark SQL 和 Hive进行集成, 集成后, 可以替换掉Hive原有MR的执行引擎, 提升效率
Spark SQL的特点:
1- 融合性: 既可以使用标准SQL语言 也可以使用代码, 同时也支持混合使用
2- 统一的数据访问: 可以通过Spark SQL来对接不同的数据库, 通过统一的API即可操作多个数据库
3- HIVE的兼容性: Spark SQL 可以和 HIVE进行整合, 整合后替换执行引擎为Spark,核心: 基于HIVE的MetaStore, 替换HiveServer2
4- 标准化连接: Spark SQL 也支持 JDBC/ODBC的连接方式
2. Spark SQL发展历史
说明:
Spark 2.0以后, 整个内部的数据类型只有一个DataSet类型
DataSet是一个有泛型约束的dataFrame对象,但是呢, 我们后续通过Python来操作, Python不支持泛型约束,所以为了能够支持在类似于Python这种不支持泛型的语言中使用Spark SQL, 所以Spark SQL在不同语言的客户端的API上都保留DataFrame的API, 这样对于无泛型约束的语言依然是可用的, 但是一旦开始运行, 其内部最终也会转回为DataSet类型
3. Spark SQL与Hive异同
相同点:
1- 都是分布式计算的引擎
2= 都可以处理大规模的数据
3- 都可以基于yarn集群运行
不同点:
1- Spark SQL是基于内存计算, 而Hive SQL是基于磁盘来进行计算的
2- Spark SQL没有元数据管理的服务(自己维护),而Hive SQL是有metastore的元数据管理服务项
3- Spark SQL底层执行Spark RDD程序, 而Hive SQL 底层执行MR
4- Spark SQL可以编写SQL 也可以编写代码, 但是Hive SQL仅能编写SQL语句
4. Spark SQL的数据结构对比
说明:
pandas的df: 二维表, 处理单机化数据
Spark Core:处理任何的数据结构, 处理大规模的分布式数据
Spark SQL: 二维表, 处理大规模的分布式数据
RDD: 存储直接就是对象, 比如在图中, 存储就是一个Person的对象, 但是里面有什么数据靠内心, 不太清楚
DataFrame: 将Person中各个字段的数据, 进行格式化存储,形成一个dataFrame,可以直接看到数据
dataSet: 将Person对象中数据都按照结构化的方式存储好, 同时保留对象的类型,从而知道来源于一个Person的对象
由于Python不支持泛型,所以无法使用DataSet类型, 客户端仅支持dataFrame类型