Spark SQL 是 Apache Spark 的用于处理结构化数据(Structured Data)的模块。
1.2 Spark SQL 特点集成: Spark 程序可实现与 SQL 查询的无缝对接。我们可以通过 Java、Scala、Python 或 R 语言利用 Spark SQL 将结构化数据作为 Spark 中的弹性分布式数据集(RDD)进行查询。
统一的数据访问: Dataframes 和 SQL 提供了访问各种数据源的通用方法,包括 Hive、Avro、Parquet、ORC、JSON 和 JDBC。
兼容 Hive: 可实现在现有仓库上运行 SQL 或 HiveQL 查询。Spark SQL 支持 HiveQL 语法以及 Hive SerDes 和 UDF。
标准数据连接: 通过 JDBC 或 ODBC 连接。
1.3 Spark SQL 数据抽象Spark Core 中的数据抽象为 RDD(弹性分布式数据集),Spark SQL 中的数据抽象为 Dataframe、DataSet。
RDD、Dataframe、DataSet 在版本上的区别:
RDD (Spark1.0) —> Dataframe(Spark1.3) —> Dataset(Spark1.6)
Dataframe 与 DataSet的关系:
在 Spark API 中,Dataframe=DataSet[Row]
1.3.1 DataframeDataframe 是一种以 RDD 为基础的分布式数据集,具备 RDD 的优点。Dataframe 在概念上等同于关系数据库中的表或 R、Python(Pandas)中的 Dataframe。
Dataframe 与 RDD 的区别在于,Dataframe 带有 schema 元信息,及每一列的名称和类型。RDD是分布式的Java对象的集合。Dataframe 是分布式的Row对象的集合。Dataframe除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化。
与 Hive 类似,Dataframe 支持嵌套数据类型(struct、array、map)。
Dataframe 作为一种抽象,不能直接用来使用,其提供了 Schema 视图,可当作数据库中的表进行操作。
Dataframe 是懒加载的,性能上比 RDD 更高,借势于 Spark SQL Catalyst优化器(树变换框架)。
1.3.2 DataSetDataSet 是分布式数据集合,是在 Spark 1.6 对 Dataframe,具备 RDD 的优势(强类型、使用 Lambda 函数的能力)及 Spark SQL 优化执行引擎的优点。DataSet 可使用 RDD 的转换因子(如 map、flatMap、filter 等)。
DataSet 是强类型的,DataSet 可利用样例类作为泛型来定义数据的结构信息,样例类的每个属性的名称可直接映射为 DataSet 的字段名称,比如DataSet[Person]。
Dataframe 是 DataSet 的特例,Dataframe=DataSet[Row]
❤️ END ❤️



