SparkSQL 读写_Writer | 学习笔记

简介: 快速学习 SparkSQL 读写_Writer

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段 SparkSQL 读写_Writer】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/690/detail/12053


SparkSQL 读写_Writer

 

SparkSQL 数据写入框架

 

在数据写入框架当中,分为几个步骤。

首先应该先去了解一下,怎么去调用,通过第一小节看看框架在哪,数据写入框架当中,这个框架当中应该有什么样的属性?了解过属性以后,其中有一项属性比较重要,叫做写入模式,在接下来第四个部分,写一个案例来去简单看一看这个数据写入框架,该如何使用。

数据写入框架在哪呢?

通过这个 df.white,刚才得到了一个 DataFrame reader,就可以通过这个 DF white 去得到一个 DataFrame water。

这个 DataFrame water 里面都有什么样的组成部分呢?

首先,在 reader 当中可以通过 format 方法来去设定其内容,特定其这个读取目标,在写入框架当中,依然可以使用这个 format 去写入设置的写入目标,其实就是 source。

为什么要有要有这个写入模式呢?

原因很简单,读取的时候不用考虑这个问题,但是写入的时候就要考虑。

比如说,现在要往一张买 SQL 表当中去写数据,假如说这张表已经存在了,它里面已经有数据了,接下来的行为应该是怎么样的,也是覆盖这个内容,还是报错,首先来去指定一下的写入模式,是覆盖数据还是怎么处理?

还会有一些这个参数需要大家去设置,比如说要往 SQL 里面去写,要去设置一下 JDBC 的位置,就设置给了一个叫做 extra options。一个外部参数,写入框架会稍微有一点特殊,就是在写的时候,有可能是要有分区的,Have 表里面是有分区的,类似于 have 的分区,如果的 have 有分区的话,往汉字里面去写,也要有这个分区表这样的一个概念,除了分区以外,Have 里面还有一个概念叫做分统,既然 have 里面之际支持分区,也支持分统,在这个写入框架,假如说和 have 配合的话,他就也要有这两个特性,一个是 partition columns 要设置按照哪一列来进行分区,

Bark market column names 就是设置用哪一列来进行分统,还要排序,所以还有一个排序的一个支持,主要说的四点。

首先要往某一个文件或者某一个数据库里面去写,他在哪?这是第一个,第二个他是一个什么样的,这个数据库它是一个什么样的文件,这是第二个数字,第三个,写的时候有一些额外的参数,第四个写的时候,要有一些这个 format,要知道这个类型是什么?要设置类型,大概跟 reader 是一样的,都是四个类型,这个属性是必须要有的。

简单来看一看 mood 这个模式,写入模式,是一个非常重要的概念,首先写入模式,就是当一个数据集,要往里面去写出内容的时候,这个数据集里面已经存在内容。

接下来的行为是什么?就是这个写入模式,如果要去,如果要是想看到这个数据集有内容,然后就报错,就设置为 error if exist。

假如说希望在往这个数据集里面写的时候,他已经有内容了,去追加到有的内容后面,这叫 open。

覆盖掉它的内容,称之为叫做 over right,大概就是这四种写入内容,在进行具体写入的时候进行更详细的介绍,小案例来去看一看,整个写入框架该如何使用。

打开的 idea 创建一个新方法,从前面拷过来一些内容,方法名就需要改成 waiter1,把这个口给他封上,其实已经把这个 spark session 创建了这个地方跑过来了。

因为这个地方案例的需要,应该先读出一个数据,这个时候再去写,当然也可以直接创建一个数据集,就先读取数据集,然后他写到另外的一个位置。

第三步就是写入数据集,就是这三个步骤,第一步骤已经做完,先去做第二步骤,读出来直接命名为叫做 DF,可以通过 spark.read,然后去设置 option,要设置一个 header,读一个 CSV 文件,这个 CSV 文件,就再给他塞这个目录下,读出这个数据内容了以后,现在是通过 CSV 读了一下,能不能给他写成一个其他格式的文件?

比如说,现在它是一个 CSV 文件读出来的内容,那可以直接使用 white 去写到一个角色,可以写到一个 JS 的地方,叫做 data set,然后叫做北京 PM,然后就点 Jason,这个时候,就已经写进去了。

这是第一种写入方式,再来看第二种写入方式,第一种写入方式,可以通过 json 这种方法?那还可以去指定 format ,这一次就是要写的文件,格式是 json,然后 save 写上 data set 下的北京 PMJC,这样,就可以给他写成两个数据集,能看到,从 CSV 文件里面读出内容读出来的,这个内容,无论是从哪儿读的,那 DF 当中关心,应该是不关心的这个 DF 当中应该只存放数据的,所以理论上他如果只存放数据的话,就可以把这个数据存储所支持的格式的文件。

去运行一下,代码已经运行完成了,但是很明显,大家是能看到这段代码在报错,他报什么错呢?他说这个有一个 comments 群里有一个到,所以就是说这个地方,有一个命令无法执行,大家能看到这个 comment,就是在执行某个命令的时候出错。

image.png

这个错就是大家需要去记住,有两种形式,一种是这样报的,还有一种是说这个 non point exception,那就是一个空指针异常,在最初的这个位置能看到这样的一个 point exception。

他找不到一个可执行的文件,就是少了一个 hadoop 的一个可运行文件。这个是 Windows 特有的一个错误,所以大家在其他的操作系统里,可能是遇不到的,但是如果在 Windows 里运行,并且还要在本地去运行,就会出现这种问题,特别是在写文件的时候会出现这个问题,如果出现这个问题的时候在整个 spark 的整个目录当中,有一个 fails 目录,为大家提供了一个一个文件,复制一下这个文件,然后进入到这个 C 盘的根目录下,或者任何其他盘都可以创建,一个文件夹叫做 you。

image.png

创建好这个文件夹以后,进去这个文件夹,在这个文件夹里面去设置一个目录叫 B,接下呢,进入到 B 当中,这个时候把它拷进来,在代码当中在执行这段代码之前,先使用一个叫做 system environment。

不叫 system environment,直接就是 system.sight properties,要去设置一个属性,这个属性叫做 hadoop.Home.,然后接下来,把整个刚才创建的那个文件夹给他写在这儿,C 盘下的两个反斜杠,叫做 when you choose 这样的一个目录写在这,不需要精确到 B 那一层,只需要在这个文件夹这一层就可以,再去运行这段代码,

image.png

这个时候又看到了第二个报错,这个报错,也是一定会遇到的,只要这样运行就一定会遇到,为什么呢?

因为这个文件夹在刚才虽然没有写入成功,但是文件已经创建出来了,这个时候,它会提示在这个 pad 里面这个文件已经存在了,所以,要把这个给删掉,把它生成了这个文件夹给删掉,再去运行一下

image.png

整个程序就可以这个非常安全的,并且非常好的运行完,整个程序运行完了,这个 test passed,就是说明的运行是没有报错的,是成功的。

去检查一下生成的文件,在这儿是写了一个 json 的文件,但其实,他给创建了一个文件夹。存在一个文件当中,但是它存到了一个文件夹当中,这点大家一定要注意,这个 PART0000 就是的这个数据文件。

两个数据文件其实都生成,都在这个对应的文件夹下,这个是为什么呢?为什么会出现这种现象呢?

整理一下代码,首先,这个 spark 是经常会用到的,包括前面这个属性,只要写文件就一定会要去写着,要去读,要去用到这样的一个这样的一个环境变量。

这个环境变量,其实是 spark 会调用一个命令,包含在这个 Windows Exe 文件当中,如果不去把它加入到环境变量当中,他就找不到,从而报空指针异常。

image.png

把这段代码暂时去掉,放到整个类的最顶上,直接给他放在类的这个级别,让他成为属性,一开始执行这个类的时候,就会执行,这就是整个过程。

小结:

数据写入框架当中,第一部分介绍数据框架在 white.white 中。

框架当中有什么属性跟原来是一样的,就是四大属性,然后写入模式是一个 mode,再去写,他会给报一个错,也是和写作模式有关的,接下来,做了一个案例。

相关文章
|
4月前
|
SQL 分布式计算 JavaScript
利用SparkSQL读写Excel数据
利用SparkSQL读写Excel数据
131 0
|
4月前
【spark2.x】如何通过SparkSQL读取csv文件
【spark2.x】如何通过SparkSQL读取csv文件
182 0
|
存储 SQL JSON
PySpark读取数据与保存
PySpark读取数据与保存
501 0
|
存储 SQL 分布式计算
【Parquet】Spark读取Parquet问题详解……
【Parquet】Spark读取Parquet问题详解……
789 0
【Parquet】Spark读取Parquet问题详解……
|
JSON 分布式计算 Java
SparkSQL 读写_Reader | 学习笔记
快速学习 SparkSQL 读写_Reader
171 0
SparkSQL 读写_Reader | 学习笔记
|
数据采集 分布式计算 大数据
SparkSQL 读写_Parquet | 学习笔记
快速学习 SparkSQL 读写_Parquet
213 0
SparkSQL 读写_Parquet | 学习笔记
|
存储 JSON 分布式计算
SparkSQL 读写_JSON | 学习笔记
快速学习 SparkSQL 读写_JSON
163 0
SparkSQL 读写_JSON | 学习笔记
|
消息中间件 JSON 分布式计算
SparkSQL 读写_JSON 小技巧 | 学习笔记
快速学习 SparkSQL 读写_JSON 小技巧
254 0
SparkSQL 读写_JSON 小技巧 | 学习笔记
|
分布式计算 关系型数据库 MySQL
SparkSQL 读写_JDBC_写入数据 | 学习笔记
快速学习 SparkSQL 读写_JDBC_写入数据
237 0
SparkSQL 读写_JDBC_写入数据 | 学习笔记
|
SQL 存储 分布式计算
SparkSQL 读写_Hive_整合 | 学习笔记
快速学习 SparkSQL 读写_Hive_整合
153 0
SparkSQL 读写_Hive_整合 | 学习笔记