7.1 初识 DataFrameReader
目标
理解
DataFrameReader
的整体结构和组成
SparkSQL
的一个非常重要的目标就是完善数据读取, 所以 SparkSQL
中增加了一个新的框架, 专门用于读取外部数据源, 叫做 DataFrameReader
@Test
def reader1() : Unit = {
//1.创建SparkSession
val spark = SparkSession.builder()
.master("local[6]")
.appName("reader1")
.getOrCreate()
//2.框架在哪
val reader: DataFrameReader = spark.read
}
DataFrameReader
由如下几个组件组成(1.文件地址2.文件类型3.读取时候的参数4.结构信息)
组件 | 解释 |
---|---|
| 结构信息, 因为 |
| 连接外部数据源的参数, 例如 |
| 外部数据源的格式, 例如 |
DataFrameReader
有两种访问方式, 一种是使用 load
方法加载, 使用 format
指定加载格式, 还有一种是使用封装方法, 类似 csv
, json
, jdbc
等
@Test
def reader2() : Unit = {
//1.创建SparkSession
val spark = SparkSession.builder()
.master("local[6]")
.appName("reader1")
.getOrCreate()
//2.第一种形式 load + format读取
spark.read
.format("csv")
.option("header",value=true)
.option("inferSchema",value = true)
.load("dataset/BeijingPM20100101_20151231.csv")
.show(10)
//3.第二种形式 使用具体文件类型读取
spark.read
.option("header",value=true)
.option("inferSchema",value = true)
.csv("dataset/BeijingPM20100101_20151231.csv")
.show(10)
}
但是其实这两种方式本质上一样, 因为类似 csv
这样的方式只是 load
的封装
如果使用 load 方法加载数据, 但是没有指定 format 的话, 默认是按照 Parquet 文件格式读取。也就是说, SparkSQL 默认的读取格式是 Parquet
总结
使用
spark.read
可以获取 SparkSQL 中的外部数据源访问框架DataFrameReader
DataFrameReader
有三个组件format
,schema
,option
DataFrameReader
有两种使用方式, 一种是使用load
加format
指定格式, 还有一种是使用封装方法csv
,json
等
7.2 初识 DataFrameWriter
目标
理解
DataFrameWriter
的结构
对于 ETL
来说, 数据保存和数据读取一样重要, 所以 SparkSQL
中增加了一个新的数据写入框架, 叫做 DataFrameWriter
@Test
def write1() : Unit = {
//1.创建SparkSession
val spark = SparkSession.builder()
.master("local[6]")
.appName("reader1")
.getOrCreate()
//2.读取数据集
val df = spark.read.option("header",value = true).csv("dataset/BeijingPM20100101_20151231.csv")
//3.写入数据集
df.write.json("dataset/beijing_pm.json")
df.write.format("json").save("dataset/beijing_pm2.json")
spark.stop()
}
DataFrameWriter
中由如下几个部分组成
组件 | 解释 |
---|---|
| 写入目标, 文件格式等, 通过 |
| 写入模式, 例如一张表已经存在, 如果通过 |
| 外部参数, 例如 |
| 类似 |
| 类似 |
| 用于排序的列, 通过 |
mode
指定了写入模式, 例如覆盖原数据集, 或者向原数据集合中尾部添加等
Scala 对象表示 | 字符串表示 | 解释 |
---|---|---|
|
| 将 |
|
| 将 |
|
| 将 |
|
| 将 |
DataFrameWriter
也有两种使用方式, 一种是使用 format
配合 save
, 还有一种是使用封装方法, 例如 csv
, json
, saveAsTable
等
val spark = SparkSession.builder()
.master("local[6]")
.appName("reader1")
.getOrCreate()
@Test
def parquet(): Unit={
//1.读取csv文件的数据
val df = spark.read.option("header",value = true).csv("dataset/BeijingPM20100101_20151231.csv")
//2.把数据写为Parquet格式
// 写入时:spark默认的文件格式parquet
// 写入模式:报错,覆盖,追加,忽略
df.write
.format("parquet")
.mode(SaveMode.Overwrite)
.save("dataset/beijing_pm3")
//3.读取Parquet格式文件
// 默认格式是parquet
// 可以读取文件夹
spark.read
.load("dataset/beijing_pm3")
.show()
}
默认没有指定 format, 默认的 format 是 Parquet
总结
类似
DataFrameReader
,Writer
中也有format
,options
, 另外schema
是包含在DataFrame
中的
DataFrameWriter
中还有一个很重要的概念叫做mode
, 指定写入模式, 如果目标集合已经存在时的行为
DataFrameWriter
可以将数据保存到Hive
表中, 所以也可以指定分区和分桶信息