From d57c7927a8d1ba8e80d0879cb5c3ea68d5b07e53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Fri, 24 May 2019 15:42:36 +0800 Subject: [PATCH] =?UTF-8?q?spark=20sql=E5=A4=96=E9=83=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/SparkSQL外部数据源.md | 352 ++++++++++++------ pictures/spark-mysql-分区上下限.png | Bin 0 -> 47778 bytes pictures/spark-分区.png | Bin 0 -> 17646 bytes resources/csv/dept.csv | 4 + resources/orc/dept.orc | Bin 0 -> 552 bytes ...fa9ad-c000.snappy.parquet => dept.parquet} | Bin resources/parquet/dept.parquet/._SUCCESS.crc | Bin 8 -> 0 bytes ...-b2f4-b780aecfa9ad-c000.snappy.parquet.crc | Bin 16 -> 0 bytes resources/parquet/dept.parquet/_SUCCESS | 0 ...e2ad66-c000.snappy.parquet => emp.parquet} | Bin resources/parquet/emp.parquet/._SUCCESS.crc | Bin 8 -> 0 bytes ...-b8bc-0a768ae2ad66-c000.snappy.parquet.crc | Bin 32 -> 0 bytes resources/parquet/emp.parquet/_SUCCESS | 0 13 files changed, 241 insertions(+), 115 deletions(-) create mode 100644 pictures/spark-mysql-分区上下限.png create mode 100644 pictures/spark-分区.png create mode 100644 resources/csv/dept.csv create mode 100644 resources/orc/dept.orc rename resources/parquet/{dept.parquet/part-00000-9dcc37bc-f4e8-4c2f-b2f4-b780aecfa9ad-c000.snappy.parquet => dept.parquet} (100%) delete mode 100644 resources/parquet/dept.parquet/._SUCCESS.crc delete mode 100644 resources/parquet/dept.parquet/.part-00000-9dcc37bc-f4e8-4c2f-b2f4-b780aecfa9ad-c000.snappy.parquet.crc delete mode 100644 resources/parquet/dept.parquet/_SUCCESS rename resources/parquet/{emp.parquet/part-00000-d2881f1b-46f7-44d4-b8bc-0a768ae2ad66-c000.snappy.parquet => emp.parquet} (100%) delete mode 100644 resources/parquet/emp.parquet/._SUCCESS.crc delete mode 100644 resources/parquet/emp.parquet/.part-00000-d2881f1b-46f7-44d4-b8bc-0a768ae2ad66-c000.snappy.parquet.crc delete mode 100644 resources/parquet/emp.parquet/_SUCCESS diff --git a/notes/SparkSQL外部数据源.md b/notes/SparkSQL外部数据源.md index f7939ff..fe1d333 100644 --- a/notes/SparkSQL外部数据源.md +++ b/notes/SparkSQL外部数据源.md @@ -1,5 +1,43 @@ # Spark SQL 外部数据源 + + ## 一、简介 ### 1.1 多数据源支持 @@ -11,11 +49,13 @@ Spark支持以下六个核心数据源,同时Spark社区还提供了多达上 - Parquet - ORC - JDBC/ODBC connections -- Plain-text files +- Plain-text files + +> 注:以下所有测试文件均可从本仓库的[resources](https://github.com/heibaiying/BigData-Notes/tree/master/resources)目录进行下载 ### 1.2 读数据格式 -所有数据源读取API都遵循以下调用格式: +所有读取API遵循以下调用格式: ```scala // 格式 @@ -47,20 +87,22 @@ DataFrameWriter.format(...).option(...).partitionBy(...).bucketBy(...).sortBy( //示例 dataframe.write.format("csv") -.option("mode", "OVERWRITE") //写模式 -.option("dateFormat", "yyyy-MM-dd") +.option("mode", "OVERWRITE") //写模式 +.option("dateFormat", "yyyy-MM-dd") //日期格式 .option("path", "path/to/file(s)") .save() ``` -| Scala/Java | 描述 | -| :--------------------------------- | :----------------------------------------------------------- | -| `SaveMode.ErrorIfExists`(默认模式) | 如果给定的路径已经存在文件,则抛出异常,这是写数据默认的模式 | -| `SaveMode.Append` | 数据以追加的方式写入 | -| `SaveMode.Overwrite` | 数据以覆盖的方式写入 | -| `SaveMode.Ignore` | Ignore mode means that when saving a DataFrame to a data source, if data already exists, the save operation is expected not to save the contents of the DataFrame and not to change the existing data. This is similar to a `CREATE TABLE IF NOT EXISTS` in SQL. | +写数据模式有以下四种可选项: +| Scala/Java | 描述 | +| :----------------------- | :----------------------------------------------------------- | +| `SaveMode.ErrorIfExists` | 如果给定的路径已经存在文件,则抛出异常,这是写数据默认的模式 | +| `SaveMode.Append` | 数据以追加的方式写入 | +| `SaveMode.Overwrite` | 数据以覆盖的方式写入 | +| `SaveMode.Ignore` | 如果给定的路径已经存在文件,则不做任何操作 | +
## 二、CSV @@ -68,74 +110,86 @@ CSV是一种常见的文本文件格式,其中每一行表示一条记录, ### 2.1 读取CSV文件 -自动推断类型: +自动推断类型读取读取示例: ```scala spark.read.format("csv") -.option("header", "true") -.option("mode", "FAILFAST") -.option("inferSchema", "true") -.load("some/path/to/file.csv") +.option("header", "false") // 文件中的第一行是否为列的名称 +.option("mode", "FAILFAST") // 是否快速失败 +.option("inferSchema", "true") // 是否自动推断schema +.load("/usr/file/csv/dept.csv") +.show() ``` 使用预定义类型: ```scala -import org.apache.spark.sql.types.{StructField, StructType, StringType, -LongType} +import org.apache.spark.sql.types.{StructField, StructType, StringType,LongType} +//预定义数据格式 val myManualSchema = new StructType(Array( -new StructField("DEST_COUNTRY_NAME", StringType, true), -new StructField("ORIGIN_COUNTRY_NAME", StringType, true), -new StructField("count", LongType, false) + StructField("deptno", LongType, nullable = false), + StructField("dname", StringType,nullable = true), + StructField("loc", StringType,nullable = true) )) spark.read.format("csv") -.option("header", "true") .option("mode", "FAILFAST") .schema(myManualSchema) -.load("/data/flight-data/csv/2010-summary.csv") -.show(5) +.load("/usr/file/csv/dept.csv") +.show() ``` ### 2.2 写入CSV文件 ```scala -import org.apache.spark.sql.types.{StructField, StructType, StringType, -LongType} -val myManualSchema = new StructType(Array( -new StructField("DEST_COUNTRY_NAME", StringType, true), -new StructField("ORIGIN_COUNTRY_NAME", StringType, true), -new StructField("count", LongType, false) -)) -spark.read.format("csv") -.option("header", "true") -.option("mode", "FAILFAST") -.schema(myManualSchema) -.load("/data/flight-data/csv/2010-summary.csv") -.show(5) +df.write.format("csv").mode("overwrite").save("/tmp/csv/dept2") ``` -将csv文件,转换为tsv文件: +也可以指定具体的分隔符: ```scala -csvFile.write.format("csv").mode("overwrite").option("sep", "\t") -.save("/tmp/my-tsv-file.tsv") +df.write.format("csv").mode("overwrite").option("sep", "\t").save("/tmp/csv/dept2") ``` +### 2.3 可选配置 + +为节省主文篇幅,所有读写配置项见文末9.1小节。 + +
+ ## 三、JSON ### 3.1 读取JSON文件 ```json -spark.read.format("json").option("mode", "FAILFAST").schema(myManualSchema) -.load("/data/flight-data/json/2010-summary.json").show(5) +spark.read.format("json").option("mode", "FAILFAST").load("/usr/file/json/dept.json").show(5) +``` + +需要注意的是:默认不支持一条数据记录跨越多行(如下),可以通过配置`multiLine`为`true`来进行更改,其默认值为`false`。 + +```json +// 默认支持单行 +{"DEPTNO": 10,"DNAME": "ACCOUNTING","LOC": "NEW YORK"} + +//默认不支持多行 +{ + "DEPTNO": 10, + "DNAME": "ACCOUNTING", + "LOC": "NEW YORK" +} ``` ### 3.2 写入JSON文件 ```scala -csvFile.write.format("json").mode("overwrite").save("/tmp/my-json-file.json") +df.write.format("json").mode("overwrite").save("/tmp/spark/json/dept") ``` +### 3.3 可选配置 + +为节省主文篇幅,所有读写配置项见文末9.2小节。 + +
+ ## 四、Parquet Parquet是一个开源的面向列的数据存储,它提供了多种存储优化,允许读取单独的列非整个文件,这不仅节省了存储空间而且提升了读取效率,它是Spark是默认的文件格式。 @@ -143,17 +197,13 @@ csvFile.write.format("json").mode("overwrite").save("/tmp/my-json-file.json") ### 4.1 读取Parquet文件 ```scala -spark.read.format("parquet") -.load("/data/flight-data/parquet/2010-summary.parquet").show(5) +spark.read.format("parquet").load("/usr/file/parquet/dept.parquet").show(5) ``` -需要注意的是:默认不支持一条数据记录跨越多行,可以通过配置`multiLine`为`true`来进行更改,其默认值为`false`。 - ### 2.2 写入Parquet文件 ```scala -csvFile.write.format("parquet").mode("overwrite") -.save("/tmp/my-parquet-file.parquet") +df.write.format("parquet").mode("overwrite").save("/tmp/spark/parquet/dept") ``` ### 2.3 可选配置 @@ -165,117 +215,183 @@ Parquet文件有着自己的存储规则,因此其可选配置项比较少, | 读 | compression or codec | None,
uncompressed,
bzip2,
deflate, gzip,
lz4, or snappy | None | 压缩文件格式 | | Read | mergeSchema | true, false | 取决于配置项`spark.sql.parquet.mergeSchema` | 当为真时,Parquet数据源将从所有数据文件收集的Schema合并在一起,否则将从摘要文件中选择Schema,如果没有可用的摘要文件,则从随机数据文件中选择Schema。 | -> 完整的配置列表可以参阅官方文档:https://spark.apache.org/docs/latest/sql-data-sources-parquet.html +> 更多可选配置可以参阅官方文档:https://spark.apache.org/docs/latest/sql-data-sources-parquet.html + +
## 五、ORC -ORC是一种自描述的、类型感知的列文件格式,它针对大型数据的读取进行了优化,也是大数据中常用的文件格式。 +ORC是一种自描述的、类型感知的列文件格式,它针对大型数据的读写进行了优化,也是大数据中常用的文件格式。 ### 5.1 读取ORC文件 ```scala -spark.read.format("orc").load("/data/flight-data/orc/2010-summary.orc").show(5) +spark.read.format("orc").load("/usr/file/orc/dept.orc").show(5) ``` ### 4.2 写入ORC文件 ```scala -csvFile.write.format("orc").mode("overwrite").save("/tmp/my-json-file.orc") +csvFile.write.format("orc").mode("overwrite").save("/tmp/spark/orc/dept") ``` +
+ ## 六、SQL Databases -spark同样支持与传统的关系型数据库进行数据读写。 +spark同样支持与传统的关系型数据库进行数据读写。但是Spark程序默认是没有提供数据库驱动的,所以在使用前需要将对应的数据库驱动上传到安装目录下的`jars`目录中。下面示例使用的是Mysql数据库,使用前需要将对应的`mysql-connector-java-x.x.x.jar`上传到jars目录下。 -### 6.1 获取数据库连接 +> 为方便大家测试,我在本仓库的[resources](https://github.com/heibaiying/BigData-Notes/tree/master/resources)目录下上传了mysql-connector-java-5.1.47.jar + +### 6.1 读取数据 + +读取全表数据示例如下,这里的`help_keyword`是mysql内置的字典表,只有`help_keyword_id`和`name`两个字段。 ```scala -import java.sql.DriverManager -val connection = DriverManager.getConnection(url) -connection.isClosed() -connection.close() -``` - -### 6.2 读取数据 - -读取全表数据: - -```scala -val pgDF = spark.read +spark.read .format("jdbc") -.option("driver", "org.postgresql.Driver") -.option("url", "jdbc:postgresql://database_server") -.option("dbtable", "schema.tablename") -.option("user", "username").option("password","my-secret-password").load() +.option("driver", "com.mysql.jdbc.Driver") //驱动 +.option("url", "jdbc:mysql://127.0.0.1:3306/mysql") //数据库地址 +.option("dbtable", "help_keyword") //表名 +.option("user", "root").option("password","root").load().show(10) ``` -读取过滤后的数据: +从查询结果读取数据: ```scala -val pushdownQuery = """(SELECT DISTINCT(DEST_COUNTRY_NAME) FROM flight_info) -AS flight_info""" -val dbDataFrame = spark.read.format("jdbc") -.option("url", url).option("dbtable", pushdownQuery).option("driver", driver) -.load() +val pushDownQuery = """(SELECT * FROM help_keyword WHERE help_keyword_id <20) AS help_keywords""" +spark.read.format("jdbc") +.option("url", "jdbc:mysql://127.0.0.1:3306/mysql") +.option("driver", "com.mysql.jdbc.Driver") +.option("user", "root").option("password", "root") +.option("dbtable", pushDownQuery) +.load().show() + +//输出 ++---------------+-----------+ +|help_keyword_id| name| ++---------------+-----------+ +| 0| <>| +| 1| ACTION| +| 2| ADD| +| 3|AES_DECRYPT| +| 4|AES_ENCRYPT| +| 5| AFTER| +| 6| AGAINST| +| 7| AGGREGATE| +| 8| ALGORITHM| +| 9| ALL| +| 10| ALTER| +| 11| ANALYSE| +| 12| ANALYZE| +| 13| AND| +| 14| ARCHIVE| +| 15| AREA| +| 16| AS| +| 17| ASBINARY| +| 18| ASC| +| 19| ASTEXT| ++---------------+-----------+ ``` +也可以使用如下的写法进行数据的过滤: + ```scala val props = new java.util.Properties -props.setProperty("driver", "org.sqlite.JDBC") -val predicates = Array( -"DEST_COUNTRY_NAME != 'Sweden' OR ORIGIN_COUNTRY_NAME != 'Sweden'", -"DEST_COUNTRY_NAME != 'Anguilla' OR ORIGIN_COUNTRY_NAME != 'Anguilla'") -spark.read.jdbc(url, tablename, predicates, props).count() // 510 +props.setProperty("driver", "com.mysql.jdbc.Driver") +props.setProperty("user", "root") +props.setProperty("password", "root") +val predicates = Array("help_keyword_id < 10 OR name = 'WHEN'") //指定数据过滤条件 +spark.read.jdbc("jdbc:mysql://127.0.0.1:3306/mysql", "help_keyword", predicates, props).show() + +//输出: ++---------------+-----------+ +|help_keyword_id| name| ++---------------+-----------+ +| 0| <>| +| 1| ACTION| +| 2| ADD| +| 3|AES_DECRYPT| +| 4|AES_ENCRYPT| +| 5| AFTER| +| 6| AGAINST| +| 7| AGGREGATE| +| 8| ALGORITHM| +| 9| ALL| +| 604| WHEN| ++---------------+-----------+ ``` -并行读取数据: +可以使用`numPartitions`指定读取数据的并行度: ```scala -val dbDataFrame = spark.read.format("jdbc") -.option("url", url).option("dbtable", tablename).option("driver", driver) -.option("numPartitions", 10).load() +option("numPartitions", 10) ``` -在这里,我们对第一个分区和最后一个分区分别指定了最小值和最大值。任何超出这些界限的都在第一个分区或最后一个分区中。然后,我们设置希望的分区总数(这是并行度的级别)。 +在这里,除了可以指定分区外,还可以设置上界和下界,任何小于下界的值都会被分配在第一个分区中,任何大于上界的值都会被分配在最后一个分区中。 ```scala -val colName = "count" -val lowerBound = 0L -val upperBound = 348113L // this is the max count in our database -val numPartitions = 10 -spark.read.jdbc(url,tablename,colName,lowerBound,upperBound,numPartitions,props) -.count() // 255 +val colName = "help_keyword_id" //用于判断上下界的列 +val lowerBound = 300L //下界 +val upperBound = 500L //上界 +val numPartitions = 10 //分区综述 +val jdbcDf = spark.read.jdbc("jdbc:mysql://127.0.0.1:3306/mysql","help_keyword", + colName,lowerBound,upperBound,numPartitions,props) ``` - - -### 6.3 写入数据 +想要验证分区内容,可以使用`mapPartitionsWithIndex`这个算子,代码如下: ```scala -val newPath = "jdbc:sqlite://tmp/my-sqlite.db" -csvFile.write.mode("overwrite").jdbc(newPath, tablename, props) +jdbcDf.rdd.mapPartitionsWithIndex((index, iterator) => { + val buffer = new ListBuffer[String] + while (iterator.hasNext) { + buffer.append(index + "分区:" + iterator.next()) + } + buffer.toIterator +}).foreach(println) ``` +执行结果如下:`help_keyword`这张表只有600条左右的数据,本来数据应该均匀分布在10个分区,但是0分区里面却有319条数据,这是因为设置了下限,所有小于300的数据都会被限制在第一个分区,即0分区。同理所有大于500的数据被分配在9分区,即最后一个分区。 + +
+ +### 6.2 写入数据 + +```scala +val df = spark.read.format("json").load("/usr/file/json/emp.json") +df.write +.format("jdbc") +.option("url", "jdbc:mysql://127.0.0.1:3306/mysql") +.option("user", "root").option("password", "root") +.option("dbtable", "emp") +.save() +``` + +
+ ## 七、Text +text文件在读写性能方面并没有任何优势,且不能表达明确的数据结构,所以其使用的比较少,读写操作如下: + ### 7.1 读取Text数据 ```scala -spark.read.textFile("/data/flight-data/csv/2010-summary.csv") -.selectExpr("split(value, ',') as rows").show() +spark.read.textFile("/usr/file/txt/dept.txt").show() ``` ### 7.2 写入Text数据 ```scala -csvFile.select("DEST_COUNTRY_NAME").write.text("/tmp/simple-text-file.txt") +df.write.text("/tmp/spark/txt/dept") ``` -## 八、数据读写高级概念 +
+ +## 八、数据读写高级特性 ### 8.1 并行读 -多个executors不能同时读取同一个文件,但它们可以同时读取不同的文件。一般来说,这意味着当您从一个包含多个文件的文件夹中读取数据时,这些文件中的每一个都将成为DataFrame中的一个分区,并由可用的executors并行读取。 +多个executors不能同时读取同一个文件,但它们可以同时读取不同的文件。这意味着当您从一个包含多个文件的文件夹中读取数据时,这些文件中的每一个都将成为DataFrame中的一个分区,并由可用的executors并行读取。 ### 8.2 并行写 @@ -283,35 +399,42 @@ csvFile.select("DEST_COUNTRY_NAME").write.text("/tmp/simple-text-file.txt") ### 8.3 分区写入 +分区和分桶这两个概念和Hive中分区表和分桶表是一致的。都是将数据按照一定规则进行拆分存储。需要注意的是`partitionBy`指定的分区和RDD中分区不是一个概念:这里的**分区表现为输出目录的子目录**,数据分别存储在对应的子目录中。 + ```scala -csvFile.limit(10).write.mode("overwrite").partitionBy("DEST_COUNTRY_NAME") -.save("/tmp/partitioned-files.parquet") +val df = spark.read.format("json").load("/usr/file/json/emp.json") +df.write.mode("overwrite").partitionBy("deptno").save("/tmp/spark/partitions") ``` +输出结果如下:可以看到输出被按照部门编号分为三个子目录,子目录中才是对应的输出文件。 + +
+ ### 8.3 分桶写入 +分桶写入就是将数据按照指定的列和桶数进行散列,目前分桶写入只支持保存为表,实际上这就是Hive的分桶表。 + ```scala val numberBuckets = 10 -val columnToBucketBy = "count" -csvFile.write.format("parquet").mode("overwrite").bucketBy(numberBuckets, columnToBucketBy).saveAsTable("bucketedFiles") +val columnToBucketBy = "empno" +df.write.format("parquet").mode("overwrite") +.bucketBy(numberBuckets, columnToBucketBy).saveAsTable("bucketedFiles") ``` ### 8.5 文件大小管理 -如果写入产生大量小文件,这时会产生大量的元数据开销。Spark和HDFS一样,都不能很好的处理这个问题,这被称为“small file problem”。同时数据文件也不能过大,否则在查询时会有不必要的性能开销,因此要把文件大小控制在一个合理的范围内。 +如果写入产生小文件数量过多,这时会产生大量的元数据开销。Spark和HDFS一样,都不能很好的处理这个问题,这被称为“small file problem”。同时数据文件也不能过大,否则在查询时会有不必要的性能开销,因此要把文件大小控制在一个合理的范围内。 在上文我们已经介绍过可以通过分区数量来控制生成文件的数量,从而间接控制文件大小。Spark 2.2引入了一种新的方法,以更自动化的方式控制文件大小,这就是`maxRecordsPerFile`参数,它允许你通过控制写入文件的记录数来控制文件大小。 ```scala // Spark将确保文件最多包含5000条记录 - df.write.option(“maxRecordsPerFile”, 5000) +df.write.option(“maxRecordsPerFile”, 5000) ``` +
- - - -## 九、附录 +## 九、可选配置附录 ### 9.1 CSV读写可选配置 @@ -368,13 +491,12 @@ csvFile.write.format("parquet").mode("overwrite").bucketBy(numberBuckets, column | createTableOptions | 写入数据时自定义创建表的相关配置 | | createTableColumnTypes | 写入数据时自定义创建列的列类型 | -> 完整的配置可以参阅官方文档:https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html - - +> 数据库读写更多配置可以参阅官方文档:https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html ## 参考资料 1. Matei Zaharia, Bill Chambers . Spark: The Definitive Guide[M] . 2018-02 +2. https://spark.apache.org/docs/latest/sql-data-sources.html diff --git a/pictures/spark-mysql-分区上下限.png b/pictures/spark-mysql-分区上下限.png new file mode 100644 index 0000000000000000000000000000000000000000..d93c61173023be6f7de0673a307b6a1a40bff23d GIT binary patch literal 47778 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 DicsMV literal 0 HcmV?d00001 diff --git a/resources/csv/dept.csv b/resources/csv/dept.csv new file mode 100644 index 0000000..2a36e93 --- /dev/null +++ b/resources/csv/dept.csv @@ -0,0 +1,4 @@ +10,ACCOUNTING,NEW YORK +20,RESEARCH,DALLAS +30,SALES,CHICAGO +40,OPERATIONS,BOSTON diff --git a/resources/orc/dept.orc b/resources/orc/dept.orc new file mode 100644 index 0000000000000000000000000000000000000000..3bb8d7724d5f31f19f25bade890259f70c46e87e GIT binary patch literal 552 zcmaJ-%}T>S82qxEpLK0<4H4F~N{JOBMd(Q(C%4MD&#%@wOx~#Ih^aKM==1nZDP6(@mS8^jU48h=u=A*n(7cU zIG|KWscy1rnoV4*6lq-YQ4TXLJlP0+E%c~8Qe~wwmt^sxw^YT9U*xa@@P<840{qw% zaT$w3CXJcO<3dzZm6ck0jbCmr0X7C>k*1=Q$yADo`gU(bkN0bUx=U?hGvK=xAqGFx z6Y(>PgqVk#F_^&}i}Voh>mOpM%?Rel7E3U9Ttq+vZSbnEsc2IT-TPHY?a-qwHPi#z z{r~v-bYK9%>>2q~uRFfzsn85Mq~&4*Vc#Cdd6g;O8fRi2`#4oHK-vxw=L1M_#ZhCx3x|V0JrlEQ2+n{ diff --git a/resources/parquet/emp.parquet/_SUCCESS b/resources/parquet/emp.parquet/_SUCCESS deleted file mode 100644 index e69de29..0000000