1. 什么是 Spark SQL
Spark SQL is Apache Spark’s module for working with structured data.
2. 特点
-
容易集成
安装Spark的时候,已经集成好了,不需要单独安装。
-
统一的数据访问方式
结构化数据的类型:JDBC,JSON,Hive,Parquet文件
对于不同的数据源,只要读取进来,生成DataFrame后,使用SQL语句操作即可。
-
完全兼容Hive
可以直接将Hive中的数据,读取到Spark SQL 中处理。(Hive默认的执行引擎是将SQL转成MapReduce,但Hive2.x可以将执行引擎配成Spark的。但是一般Hive不常作为计算来用,一般还是用作数据仓库。)
-
支持标准的数据连接
JDBC,ODBC
3. 为什么要学习Spark SQL
- Spark SQL 基于Spark,效率比Hive高。
Hive是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,但MapReduce这种计算模型执行效率比较慢。而Spark SQL是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快。 - 同时Spark SQL也支持从Hive中读取数据。
4. 核心的概念:表(DataFrame 或 Dataset)
表 = 表结构 + 数据
- DataFrame
- DataFrame = Schema (case class) + RDD(数据)
DataFrame比RDD多了数据的结构信息,即Schema。 - RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合。
- DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化。
- DataFrame API支持的语言有Scala,Java,Python和R。
- DataFrames可以从各种来源构建,如结构化数据文件,Hive中的表,外部数据库或现有RDDs。
- 缺乏编译时类型安全。
- Dataset
- Dataset 是 Spark 1.6 之后,对 DataFrame做的一个封装。为了解决DataFrame缺乏编译时类型安全这个问题。
- Dataset是数据的分布式集合。Dataset是在Spark 1.6中添加的一个新接口,是DataFrame之上更高一级的抽象。它提供了RDD的优点(强类型化,使用强大的lambda函数的能力)以及Spark SQL优化后的执行引擎的优点。一个Dataset 可以从JVM对象构造,然后使用函数转换(map, flatMap,filter等)去操作。
- Dataset API 支持Scala和Java,不支持Python。