DataFrameReader、DataFrameWrite、Spark整合Hive、JDBC

您所在的位置:网站首页 sparkdataframewrite写入hive DataFrameReader、DataFrameWrite、Spark整合Hive、JDBC

DataFrameReader、DataFrameWrite、Spark整合Hive、JDBC

2023-11-10 14:58| 来源: 网络整理| 查看: 265

数据读写 初识 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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3