spark的json數據的讀取和保存


1) spark可以讀取很多種數據格式,spark.read.按tab鍵表示顯示:

scala>spark.read.

csv  format  jdbc  json  load  option  options  orc  parquet  schema  table  text  textFile

2) spark.read.format("json")方式讀取json文件

scala> spark.read.format("json").load("file:///opt/module/data/input/2.json")
res0: org.apache.spark.sql.DataFrame = [age: bigint, name: string]

scala> spark.read.format("json").load("file:///opt/module/data/input/2.json").show
+---+--------+
|age| name|
+---+--------+
| 20|zhangsan|
| 20| lisi|
| 20| wangwu|
+---+--------+

3)上面的方式等同於這種方式 直接spark.read.json

scala> spark.read.json("file:///opt/module/data/input/2.json")
res3: org.apache.spark.sql.DataFrame = [age: bigint, name: string]

scala> spark.read.json("file:///opt/module/data/input/2.json").show
+---+--------+
|age| name|
+---+--------+
| 20|zhangsan|
| 20| lisi|
| 20| wangwu|
+---+--------+

 

4)因為spark.read.load 默認獲取parquet格式文件,所以需要特別關注一下這個點。

 

2.1) spark 寫數據的方法最直接的常用方式是df一下,因為得有數據,之前啥也沒有,所以需要用df來保存

scala> val df = spark.read.json("file:///opt/module/data/input/2.json")

df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]

 

2)使用df.write.save 加路徑就可以了。

scala> df.write.save("file:///opt/module/data/output/one")
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

3)這是可以進入/opt/module/data/output/one看一下保存的什么東西

[root@hadoop1 one]# ll
total 4
-rw-r--r-- 1 root root 598 Oct 9 03:01 part-00000-555473fa-02fd-4cda-b5f7-07eb40c4a889.snappy.parquet
-rw-r--r-- 1 root root 0 Oct 9 03:01 _SUCCESS
你會發現保存的就是默認parquet文件

 

4) 但是,默認parquet的格式不是我想要的,那我應該format一下格式,放在新的文件夾里面output/two即可,注意一旦還放one里面的話,他會提示你已經存在了的錯誤。

scala> df.write.format("json")save("file:///opt/module/data/output/two")

drwxr-xr-x 2 root root 168 Oct 9 03:09 two
[root@hadoop1 output]# cd two
[root@hadoop1 two]# ll
total 4
-rw-r--r-- 1 root root 81 Oct 9 03:09 part-00000-aea3fbd5-8ec7-46d2-90a5-4330ac35fa24.json
-rw-r--r-- 1 root root 0 Oct 9 03:09 _SUCCESS
[root@hadoop1 two]#

 

 

5)接着上面的為什么要系統在建一個文件夾,但是我們公司需要保存的文件放在一個類別就放一個夾子里面。這里就涉及到保存的模式mode問題了,你給他你個mode()參數就可以了。

scala> df.write.format("json").mode("append").save("file:///opt/module/data/output/two")

這里可以說是append追加方式,還有更多saveMode詳細介紹如下

scala/Java              Any Language    Meaning

SaveMode.ErrorIfExists(default默認方式)  "error"(給報錯)  如果文件存在,則報錯

SaveMode.Append           ““append”      下面追加

SaveMode.Overwrite           "overwrite"     覆蓋寫入

SaveMode.Ignore             "ignore"      數據存在,則忽略

我們如果重復操作append的話,結果是兩個。

[root@hadoop1 two]# ll
total 8
-rw-r--r-- 1 root root 81 Oct 9 03:29 part-00000-4a2c0712-ad48-4ca5-ae39-6eb0ee94bd42.json
-rw-r--r-- 1 root root 81 Oct 9 03:31 part-00000-f35ef5bf-e1e5-4262-893f-44a8d0ce9080.json
-rw-r--r-- 1 root root 0 Oct 9 03:31 _SUCCESS

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM