From c42668a9511a42df89ef7d58ac6b38c516582b2e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com>
Date: Sat, 18 May 2019 11:49:51 +0800
Subject: [PATCH] spark sql
---
code/spark/spark-core/pom.xml | 9 +-
.../main/java/rdd/scala/SparkSqlTest.scala | 57 +++++++
notes/SparkSQL-Datasets&DataFrames.md | 158 ++++++++++++++++++
pictures/spark-Logical-Planning.png | Bin 0 -> 83483 bytes
pictures/spark-Physical-Planning.png | Bin 0 -> 95646 bytes
pictures/spark-dataFrame+RDDs.png | Bin 0 -> 64515 bytes
pictures/spark-structure-api.png | Bin 0 -> 232523 bytes
pictures/spark-unifed.png | Bin 0 -> 62165 bytes
pictures/spark-运行安全.png | Bin 0 -> 48229 bytes
pictures/spark-运行时类型安全.png | Bin 0 -> 47583 bytes
pictures/sql-hive-arch.png | Bin 0 -> 19874 bytes
11 files changed, 223 insertions(+), 1 deletion(-)
create mode 100644 code/spark/spark-core/src/main/java/rdd/scala/SparkSqlTest.scala
create mode 100644 notes/SparkSQL-Datasets&DataFrames.md
create mode 100644 pictures/spark-Logical-Planning.png
create mode 100644 pictures/spark-Physical-Planning.png
create mode 100644 pictures/spark-dataFrame+RDDs.png
create mode 100644 pictures/spark-structure-api.png
create mode 100644 pictures/spark-unifed.png
create mode 100644 pictures/spark-运行安全.png
create mode 100644 pictures/spark-运行时类型安全.png
create mode 100644 pictures/sql-hive-arch.png
diff --git a/code/spark/spark-core/pom.xml b/code/spark/spark-core/pom.xml
index c685072..e8128f4 100644
--- a/code/spark/spark-core/pom.xml
+++ b/code/spark/spark-core/pom.xml
@@ -10,6 +10,7 @@
2.12
+ 2.4.0
@@ -31,8 +32,14 @@
org.apache.spark
spark-core_${scala.version}
- 2.4.0
+ ${spark.version}
+
+ org.apache.spark
+ spark-sql_${scala.version}
+ ${spark.version}
+
+
junit
diff --git a/code/spark/spark-core/src/main/java/rdd/scala/SparkSqlTest.scala b/code/spark/spark-core/src/main/java/rdd/scala/SparkSqlTest.scala
new file mode 100644
index 0000000..1907cf2
--- /dev/null
+++ b/code/spark/spark-core/src/main/java/rdd/scala/SparkSqlTest.scala
@@ -0,0 +1,57 @@
+package rdd.scala
+
+import org.apache.spark.sql.{Dataset, SparkSession}
+
+
+object SparkSqlTest extends App {
+
+
+
+ val spark = SparkSession.builder().appName("Spark SQL basic example").config("spark.some.config.option", "some-value").getOrCreate()
+
+ val dataFrames = spark.read.json("/usr/file/people.json")
+
+ df.select("name").show()
+
+ df.printSchema()
+
+
+
+
+ import spark.implicits._
+
+ val primitiveDS = Seq(1, 2, 3).toDS()
+ primitiveDS.printSchema()
+ primitiveDS.map(_ + 1).collect()
+
+ peopleDS.select("name").show() //失败
+ peopleDS.dtypes
+ peopleDS.printSchema()
+ peopleDS.toDF()
+ // Encoders are created for case classes
+
+ /* 1.此时把selected写成为selected ,编译器没有任何提示 */
+ spark.sql("selected name from emp")
+
+ /* 2.此时把selected写成为selected ,编译器有提示; 但是把字段名称name写成了nameEd ,编译器没有任何提示*/
+ val dataFrames = spark.read.json("people.json")
+ dataFrames.selected("nameEd").show()
+ dataFrames.map(line=>line.name)
+
+ case class Person(name: String, age: Long)
+
+ /* 3.此时最为严格,语法和字段名称错误都被检测出来*/
+ val dataSet: Dataset[Person] = spark.read.json("people.json").as[Person]
+ dataSet.selected("name")
+ dataSet.map(line=>line.name)
+ dataSet.map(line=>line.nameEd)
+
+ /* 4.即使在由RDD转换为dataFrame时候指定了类型Person,依然无法提示字段名称*/
+ val peopleDF = spark.sparkContext
+ .textFile("people.json")
+ .map(_.split(","))
+ .map(attributes => Person(attributes(0), attributes(1).trim.toInt))
+ .toDF()
+ peopleDF.map(line=>line.name)
+
+}
diff --git a/notes/SparkSQL-Datasets&DataFrames.md b/notes/SparkSQL-Datasets&DataFrames.md
new file mode 100644
index 0000000..58931b4
--- /dev/null
+++ b/notes/SparkSQL-Datasets&DataFrames.md
@@ -0,0 +1,158 @@
+# Spark SQL DataFrames
+
+
+
+## 一、Spark SQL简介
+
+Spark SQL是Spark中的一个子模块,主要用于操作结构化数据。其具有以下特点:
+
++ 能够将SQL查询与Spark程序无缝混合。允许您使用SQL或DataFrame API对结构化数据进行查询,支持Java,Scala,Python和R语言;
++ Spark SQL支持多种数据源,包括Hive,Avro,Parquet,ORC,JSON和JDBC;
++ Spark SQL支持HiveQL语法以及Hive SerDes和UDF,允许你访问现有的Hive仓库;
++ 支持标准的JDBC和ODBC连接;
++ Spark SQL支持优化器,列式存储和代码生成等特性,以提高查询效率;
++ 支持扩展并能保证容错。
+
+
+
+## 二、DataFrame & DataSet
+
+### 2.1 DataFrame
+
+为了支持结构化数据的处理,Spark SQL提供了新的数据结构DataFrame。
+
+DataFrame是一个由具名列组成的数据集。它在概念上等同于关系数据库中的表或R/Python语言中的data frame,同时DataFrame还在底层做了更多的优化,以保证查询效率。 DataFrame具备以下特点:
+
++ 支持多种数据源,如结构化数据文件,Hive表,外部数据库或现有RDD;
++ 支持Scala,Java,Python和R语言,在Scala和Java中,DataFrame由行数据集(Rows)表示:
+ + 在Scala API中,DataFrame等价于Dataset [Row];
+ + 在Java API中,DataFrame等价于Dataset\。
+
+| 语言 | 主要抽象 |
+| ------ | -------------------------------------------- |
+| Scala | Dataset[T] & DataFrame (Dataset[Row] 的别名) |
+| Java | Dataset[T] |
+| Python | DataFrame |
+| R | DataFrame |
+
+### 2.2 DataFrame 对比 RDDs
+
+DataFrame和RDDs最主要的区别在于一个面向的是结构化数据,一个面向的是非结构化数据,它们内部的数据结构如下:
+
+
+
+DataFrame内部的有明确Scheme结构,即列名、列字段类型都是已知的,这带来的好处是可以减少数据读取以及更好地优化执行计划,从而保证查询效率。
+
+**DataFrame和RDDs应该如何选择?**
+
++ 如果你想使用函数式编程而不是DataFrame API,则使用RDDs;
++ 如果你的数据是非结构化的(比如流媒体或者字符流),则使用RDDs,
++ 如果你的数据是结构化的(如RDBMS中的数据)或者半结构化的(如日志),出于性能和优化上的考虑,建议使用DataFrame。
+
+### 2.3 DataSet
+
+在上一小节中,我们提到了Dataset这个概念,这里做一下解释:
+
+Dataset是分布式的数据集合,在Spark 1.6版本被引入。它集成了RDD和Spark SQL的优点,具备强类型,完善的lambda函数和执行引擎优化等特点,支持Scala和Java语言。在Spark 2.0后,为了方便开发者,Spark将DataFrame和Dataset的API融合到一起,提供一致性API,即用户可以通过一套标准API完成对两者的操作。
+
+> 这里注意一下:DataFrame被标记为Untyped API,而DataSet被标记为Typed API,后文会对两者做出解释。
+
+
+
+
+
+### 2.4 静态类型与运行时类型安全
+
+静态类型(Static-typing)与运行时类型安全(runtime type-safety) 主要表现如下:
+
+在实际使用中,如果你用的是Spark SQL的查询语句,则直到运行时你才会发现有语法错误,而如果你用的是DataFrame和 Dataset,则在编译时就可以发现错误(这节省了开发时间和整体代价)。DataFrame和Dataset主要区别在于:
+
+在DataFrame中,当你调用了API之外的函数,编译器就会报错,但如果你使用了一个不存在的字段名字,编译器依然无法发现。而在Dataset中,因为其API都是用lambda函数和JVM类型对象表示的,所有不匹配的类型参数在编译时就会被发现。
+
+以上这些最终都被解释成关于类型安全图谱,对应开发中的语法和分析错误。在图谱中,Dataset最严格,但对于开发者来说效率最高。
+
+
+
+上面的描述可能并没有那么直观,下面的给出一个IDEA中代码编译的示例:
+
+
+
+这里一个可能的疑惑是DataFrame明明是有确定的Scheme结构(即列名、列字段类型都是已知的),但是为什么还是无法对列名进行推断和错误判断,这是因为DataFrame是Untyped的。
+
+### 2.5 Untyped & Typed
+
+在2.3小节,我们介绍过DataFrame API被标记为Untyped API,而DataSet API被标记为Typed API。
+
+DataFrame的Untyped是相对于语言(或API)层面而言,它确实有明确的Scheme结构,即列名,列类型都是确定的,但这些信息完全由Spark来维护,Spark只会在运行时检查这些类型和指定类型是否一致。这也就是为什么在Spark 2.0之后,官方推荐把DataFrame看做是`DatSet[Row]`,Row是spark中定义的一个`trait`,其子类中封装了列字段的信息。
+
+相对而言,DataSet是Typed的,即强类型。如下面代码,dataSet的类型由case class(scala)或者Java bean(Java)来明确指定的,在这里即每一行数据代表一个`Person`,这些信息由JVM来保证正确性,所以字段名错误和类型错误在编译的时候就会被IDE发现。
+
+```scala
+case class Person(name: String, age: Long)
+val dataSet: Dataset[Person] = spark.read.json("people.json").as[Person]
+```
+
+
+
+## 三、DataFrame & DataSet & RDDs 总结
+
+这里对三者做一下简单的总结:
+
++ RDDs适合非结构化数据的处理,而DataFrame & DataSet更适合结构化数据和半结构化的处理;
++ DataFrame & DataSet可以通过统一的Dataset API进行访问,而RDDs则更适合函数式编程的场景;
++ 相比于DataFrame而言,DataSet是强类型的(Typed),有着更为严格的静态类型检查;
++ DataSets、DataFrames、SQL的底层都依赖了RDDs API,并对外提供结构化的访问接口。
+
+
+
+
+
+## 四、Spark SQL的运行原理
+
+对于结构化APIs(DataFrames & DataSets & SQL),其实际执行流程都是相同的:
+
+1. 进行DataFrame/Dataset/SQL编程;
+
+2. 如果是有效的代码,即代码没有编译错误,Spark 将其转换为一个逻辑计划;
+3. Spark 将此逻辑计划转换为物理计划,同时进行代码优化;
+4. Spark 然后在集群上执行这个物理计划(基于 RDD 操作) 。
+
+### 4.1 逻辑计划(Logical Plan)
+
+执行的第一个阶段是将用户代码转换成一个逻辑计划。它首先将用户代码转换成unresolved logical plan(未解决的逻辑计划),之所以这个计划是未解决的,是因为尽管您的代码在语法上是正确的,但是它引用的表或列可能不存在。 Spark使用analyzer(分析器)基于catalog(存储的所有表和DataFrame信息)进行解析。解析失败则拒绝执行,解析成功则将结果传给Catalyst优化器(Catalyst Optimizer),优化器是一组规则的集合,用于优化逻辑计划,通过谓词下推等方式进行优化,最终输出优化后的逻辑执行计划。
+
+
+
+
+
+### 4.2 物理计划(Physical Plan)
+
+在得到优化后的逻辑计划后,Spark就开始了物理计划过程。 它如何通过生成不同的物理执行策略,并通过成本模型来比较它们,从而选择一个最优的物理计划在集群上面执行的。物理规划的输出结果是一系列的RDDs和转换关系(transformations)。
+
+
+
+### 4.3 执行
+
+在选择一个物理计划后,Spark运行其RDDs代码,并在运行时执行进一步的优化,生成本地Java字节码,最后将运行结果返回给用户。
+
+
+
+## 参考资料
+
+1. Matei Zaharia, Bill Chambers . Spark: The Definitive Guide[M] . 2018-02
+2. [Spark SQL, DataFrames and Datasets Guide](https://spark.apache.org/docs/latest/sql-programming-guide.html)
+3. [且谈 Apache Spark 的 API 三剑客:RDD、DataFrame 和 Dataset(译文)](https://www.infoq.cn/article/three-apache-spark-apis-rdds-dataframes-and-datasets)
+4. [A Tale of Three Apache Spark APIs: RDDs vs DataFrames and Datasets(原文)](https://databricks.com/blog/2016/07/14/a-tale-of-three-apache-spark-apis-rdds-dataframes-and-datasets.html)
diff --git a/pictures/spark-Logical-Planning.png b/pictures/spark-Logical-Planning.png
new file mode 100644
index 0000000000000000000000000000000000000000..22ed6ef6a8bc8a761c58af2effd8f4a606ff931c
GIT binary patch
literal 83483
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%0Didh&UHK$K;>aD)FjX
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