DataFrameReader、DataFrameWrite、Spark整合Hive、JDBC

数据读写

初识 DataFrameReader

SparkSQL 的一个非常重要的目标就是完善数据读取, 所以 SparkSQL 中增加了一个新的框架, 专门用于读取外部数据源, 叫做 DataFrameReader

def reader1(): Unit = {
    // 1. 创建 SparkSession
    val spark = SparkSession.builder()
      .master("local[6]")
      .appName("reader1")
      .getOrCreate()

    // 2. 框架在哪
    val reader: DataFrameReader = spark.read
  }

DataFrameReader 由如下几个组件组成
在这里插入图片描述

DataFrameReader 两种访问方式

一种是使用 load 方法加载, 使用 format 指定加载格式
一种是使用封装方法, 类似 csv, json, jdbc 等.

def reader2(): Unit = {
    // 创建 SparkSession
    val spark = SparkSession.builder()
      .master("local[6]")
      .appName("reader2")
      .getOrCreate()

    //  第一种形式 load
    spark.read
      .format("csv")
      .option("header", value = true)
      .option("inferSchema", value = true)
      .load("dataset/BeijingPM20100101_20151231.csv")
      .show(10)

    //  第二种形式 csv 等封装方法
    spark.read
      .option("header", value = true)
      .option("inferSchema", value = true)
      .csv("dataset/BeijingPM20100101_20151231.csv")
      .show(10)
  }

但是其实这两种方式本质上一样, 因为类似 csv 这样的方式只是 load 的封装

e8af7d7e5ec256de27b2e40c8449a906

如果使用 load 方法加载数据, 但是没有指定 format 的话, 默认是按照 Parquet 文件格式读取

也就是说, SparkSQL 默认的读取格式是 Parquet

初识 DataFrameWriter

对于 ETL 来说, 数据保存和数据读取一样重要, 所以 SparkSQL 中增加了一个新的数据写入框架, 叫做 DataFrameWriter

val spark: SparkSession = ...

val df = spark.read
      .option("header", true)
      .csv("dataset/BeijingPM20100101_20151231.csv")

val writer: DataFrameWriter[Row] = df.write

DataFrameWriter 中由如下几个部分组成
在这里插入图片描述
mode 指定了写入模式, 例如覆盖原数据集, 或者向原数据集合中尾部添加等
在这里插入图片描述
DataFrameWriter 也有两种使用方式, 一种是使用 format 配合 save, 还有一种是使用封装方法, 例如 csv, json, saveAsTable

 def writer1(): Unit = {
    
    val df = spark.read.option("header", true).csv("dataset/BeijingPM20100101_20151231.csv")

    // 使用 json 保存,因为方法是 json,所以隐含的 format 是 json
    df.write.json("dataset/beijing_pm.json")

	// 使用 save 保存,使用 format 设置文件格式
    df.write.format("json").save("dataset/beijing_pm2.json")
  }

读写 Parquet 格式文件

什么时候会用到 Parquet ?

00a2a56f725d86b5c27463f109c43d8c
在 ETL 中, Spark 经常扮演 T 的职务, 也就是进行数据清洗和数据转换.

为了能够保存比较复杂的数据, 并且保证性能和压缩率, 通常使用 Parquet 是一个比较不错的选择.

所以外部系统收集过来的数据, 有可能会使用 Parquet, 而 Spark 进行读取和转换的时候, 就需要支持对 Parquet 格式的文件的支持.

使用代码读写 Parquet文件

默认不指定 format 的时候, 默认就是读写 Parquet 格式的文件

def parquet(): Unit = {
    // 1. 读取 CSV 文件的数据
    val df = spark.read
    .option("header", true)
    .csv("dataset/BeijingPM20100101_20151231.csv")

    // 2. 把数据写为 Parquet 格式
    // 写入的时候, 默认格式就是 parquet
    // 写入模式, 报错, 覆盖, 追加, 忽略
    df.write
      .mode(SaveMode.Overwrite)
      .save("dataset/beijing_pm3")

    // 3. 读取 Parquet 格式文件
    // 默认格式是否是 paruet? 是
    // 是否可能读取文件夹呢? 是
    spark.read
      .load("dataset/beijing_pm3")
      .show()
  }
写入 P
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值