SparkSQL 读写_JSON | 学习笔记

简介: 快速学习 SparkSQL 读写_JSON

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

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


SparkSQL 读写_JSON

 

内容介绍:

一、什么时候会用到 JSON

二、读写 JSON 文件

 

要读写 JSON 文件要先了解以下几点:第一,JSON 的应用场景;第二,JSON 格式的读写;第三,JSON 格式读写上的小技巧,本章以介绍应用场景为主。

 

一、什么时候会用到 JSON

JSON 用于途中的业务系统的位置,JSON 并不是一个压缩的数据格式,也不是一个列存储的数据格式,也不是一个可以高效读取的数据格式,甚至 JSON 相对而言还较为繁琐,它最重要的应用场景是在业务系统当中,包括 SpringBoot 这样的工具,这类外观工具在前后端传输的时候,大量使用 JSON,mongDB 也是基于 JSON 的,所以在业务系统中 JSON 被广泛使用。

 

同时在 ETL 中的 E 到 HDFS 的过程中也极有可能需要存储 JSON,同时进行读处理的时候更难免需要使用到 JSON。

1669179831557.jpg

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

在业务系统中,JSON 是一个非常常见的数据格式,在前后端交互的时候也往往会使用 JSON ,从业务系统获取的数据很大可能性是使用 JSON 格式,所以就需要 Spark 能够支持 JSON 格式文件的读取。

 

二、读写 JSON 文件

将要 Dataset 保存为 JSON 格式的文件比较简单,是 DataFramewriter 的一个常规使用。

1.JSON 的存入

如何进行 JSON 文件的读写,打开 IDEA 创建一个新方法,命名为 json,方法中第一步首先读取一个数据集,设置为 json 的形式。

l 代码如下:

@Test

def json(): unit = {

val df = spark .read

option("header", value = true)

.csv( path = "dataset/BeijingPM20100101_20151231.csv")

//将其设置为 json 的形式

df.write

.json( path ="dataset/beijing_pm5.json")

将以上代码在方法体中运行,查看 json 的格式文件,运行完毕后就可以看到 json 的格式文件名为 beijing_pm5.json 成功生成,打开就可以看到数据存储在 part-00000 中存储格式为 json。

1669179868340.jpg

打开文件后,就可以看到以下看似是 json 格式的文件,但{}的尾部并没有逗号,同时第一个位置也没有数组的符号,所以它并不是一个标准格式的 json 文件,它本身就是一条 json。

json 的格式是以花括号开头,逗号作为分隔。同时它的花括号是遥相呼应的,开头有一个,结尾必然也有一个。而花括号中的就是就是列名和其对应的值。可以将 json 的整体看做一个对象。

属性的属性名和属性值之间用(:)分隔,多个属性用(,)逗号分隔,如其中的"year"" : "2010”,year 就是属性名,2010 就是属性值。同时如果将”2010”的冒号去掉变为 2010,就可以将其指定为 int 类型。

l 数据如下:

{

"No":""1"",//属性的属性名和属性值,之间用:分隔

"year"" : "2010,

"month" : "1",

"day" : ""1",

"hour :"e",

"season" : "4",

"PM_Dongsi":"NA",

"PM_Dongsihuan"" :"NA",

“PM_Nongzhanguan":"NA",

"PM_US_Post”:"NA",

"DEWP" :”-21"",

"HUMI":43"",

"PRES":"1021"

"TEMP"":"-11",

"cbwd" :"MN",

"Iws":"1.79",

"precipitation" :"e" , "Iprec" :"0"

)

l 总结:

json 的格式是以花括号开头,逗号用于分隔多个属性之间,同时属性的值可以有数据类型。

支持数值型,布尔型和字符串等等。JSON 的关键作用是在大数据业务中使用的十分广泛,因为大数据系统要经常和业务系统进行配合时,就需要 JSON。同时在 java 的 JSON 解析库十分齐全。以上就是 JSON 全部的存入过程。

2. JSON 的读取

l 代码如下:

@Test

def json(): unit = {

val df = spark .read

.option("header", value = true)

csv( path = "dataset/BeijingPM20100101_20151231.csv")

//将其设置为 json 的形式

//df.write

// .json( path ="dataset/beijing_pm5.json")

//直接使用 spark.read,同时设置要读取的 json 文件位置

Spark.read

.json(path = “dataset/beijing_pm5.json”)

.show()

}

运行以上代码,在控制台看到所有的数据被成功读出,就可以说明以上读取操作成功。

最后需要注意的是 json 的格式代码在编译器中的属性值默认都是字符串形式,有部分数据可能会有一些杂值,除非通过指定 schema 的形式,如果没有指定的话,在写 json 的时候会默认使用 String 的格式,同时使用 spark.read 来读取 json 文件的时候会自动发现文件当中的数据类型,如读取的一列是 String,那么读取后的结果也会是 String。

同时将数据写成 json 的形式,并非是将其写成一个单独 json 的形式,而是以下形式:

{

"No":""1"",//属性的属性名和属性值,之间用:分隔

"year"" : "2010,

"month" : "1",

"day" : ""1",

"hour :"e",

"season" : "4",

"PM_Dongsi":"NA",

"PM_Dongsihuan"" :"NA",

“PM_Nongzhanguan":"NA",

"PM_US_Post”:"NA",

"DEWP" :”-21"",

"HUMI":43"",

"PRES":"1021"

"TEMP"":"-11",

"cbwd" :"MN",

"Iws":"1.79",

"precipitation" :"e" , "Iprec" :"0"

}

这才是一条单独的 json。而图中写成的就是一个个单独的 json 的形式,它并不能够直接被 json 解析器解析出来,而是读出其中每个单独的一行,所以该模式称为 json 行文件,后缀可能叫做 jsonl。

1669179921897.jpg

如果不重新分区,则会为 DataFrame 底层的 RDO 的每个分区生成一个文件,为了保持只有一个输出文件,所以重新分区。

保存为 JSON 格式的文件有一个细节需要注意,这个 JSON 格式的文件中,每一行是一个独立的 JSON ,但是整个文件并不只是一个 JSON 字符串,所以这种文件格式很多时候被成为 JSON Line 文件,有时候后缀名也会变为 jsonl。

l beijing_pm.jsonl 代码:

{ "day" : "1" , "hour" : "O" , "season" : "1" , "year" : 2013, "month" : 3}{ "day" : "1" , "hour" : "1" , "season" : "1" , "year " : 2013 , "month" :3]{ "day" : "1" , "hour" : "2" , "season" : "1" , "year" :2013 , "month" : 3}

相关文章
|
2月前
|
JSON 前端开发 Java
Spring mvc-文件上传与JSON-学习笔记
Spring mvc-文件上传与JSON-学习笔记
35 2
|
6月前
|
JSON 前端开发 数据格式
前端学习笔记202306学习笔记第三十七天-js-认识json数据2
前端学习笔记202306学习笔记第三十七天-js-认识json数据2
37 0
|
6月前
|
JSON 前端开发 数据格式
前端学习笔记202307学习笔记第六十天-json server的介绍和服务搭建1
前端学习笔记202307学习笔记第六十天-json server的介绍和服务搭建1
47 0
|
6月前
|
JSON 前端开发 数据格式
前端学习笔记202306学习笔记第三十七天-js-认识json数据1
前端学习笔记202306学习笔记第三十七天-js-认识json数据1
35 0
|
6月前
|
JSON 前端开发 数据格式
前端学习笔记202306学习笔记第三十七天-js-认识json数据3
前端学习笔记202306学习笔记第三十七天-js-认识json数据3
35 0
|
7月前
|
JSON 数据格式 Python
python读取exlce并转为json的学习笔记
python读取exlce并转为json的学习笔记
52 0
|
9月前
|
JSON 数据格式
java202303java学习笔记第四十六天-请求-日期参数&json参数1
java202303java学习笔记第四十六天-请求-日期参数&json参数1
55 0
|
9月前
|
JSON 数据格式
java202303java学习笔记第四十六天-请求-日期参数&json参数2
java202303java学习笔记第四十六天-请求-日期参数&json参数2
39 0
|
9月前
|
JSON 数据格式
java202304java学习笔记第六十二天-ssm-页面跳转-回显数据json格式字符串
java202304java学习笔记第六十二天-ssm-页面跳转-回显数据json格式字符串
51 0
|
JSON JavaScript 前端开发
Python学习笔记第二十六天(JSON)
Python学习笔记第二十六天讲解使用JSON、使用第三方库:Demjson的用法。
88 0
Python学习笔记第二十六天(JSON)