JSON文件
你可以讀入JSON文件單行的或多行模式。在單行模式下,一個文件可以被分割成多個部分並並行讀取。在多行模式下,文件作為一個整體加載不能是分裂。
有關詳細信息,請參見JSON文件.
獲救數據列
請注意
中支持此特性Databricks Runtime 8.2(不支持)及以上。
獲救的數據列確保在ETL期間不會丟失或錯過數據。獲救的數據列包含任何未解析的數據,這可能是因為給定模式中缺少這些數據,也可能是因為類型不匹配,或者是因為記錄或文件中列的外殼與模式中的不匹配。獲救的數據列作為一個JSON blob返回,其中包含獲救的列和記錄的源文件路徑(源文件路徑在Databricks Runtime 8.3及以上版本中可用)。要從已保存的數據列中刪除源文件路徑,可以設置SQL配置spark.conf.set(“spark.databricks.sql.rescuedDataColumn.filePath.enabled”,“假”)
.可以通過設置該選項啟用已保存的數據列rescuedDataColumn
到列名,例如_rescued_data
與spark.read.option(“rescuedDataColumn”,“_rescued_data”).format (json) .load(<路徑>)
.
JSON解析器在解析記錄時支持三種模式:寬容的
,DROPMALFORMED
,FAILFAST
.當與rescuedDataColumn
,數據類型不匹配不會導致記錄被刪除DROPMALFORMED
模式或拋出錯誤FAILFAST
模式。隻有損壞的記錄(即不完整或畸形的json)才會被丟棄或拋出錯誤。如果你使用這個選項badRecordsPath
在解析JSON時,數據類型不匹配不被認為是壞記錄rescuedDataColumn
.僅存儲不完整和格式錯誤的JSON記錄badRecordsPath
.
例子
單行模式
在這個例子中,每行有一個JSON對象:
{“字符串”:“string1”,“int”:1,“數組”:[1,2,3.],“東西”:{“關鍵”:“value1”}}{“字符串”:“string2相等”,“int”:2,“數組”:[2,4,6],“東西”:{“關鍵”:“value2”}}{“字符串”:“string3”,“int”:3.,“數組”:[3.,6,9],“東西”:{“關鍵”:“value3”,“extra_key”:“extra_value3”}}
要讀取JSON數據,使用:
瓦爾df=火花.讀.格式(“json”).負載(“example.json”)
Spark自動推斷模式。
df.printSchema
根|--數組:數組(可以為空=真正的)||--元素:長(containsNull=真正的)|--dict:結構體(可以為空=真正的)||--extra_key:字符串(可以為空=真正的)||--關鍵:字符串(可以為空=真正的)|--int:長(可以為空=真正的)|--字符串:字符串(可以為空=真正的)
多行模式
這個JSON對象占用了多行:
[{“字符串”:“string1”,“int”:1,“數組”:[1,2,3.],“東西”:{“關鍵”:“value1”}},{“字符串”:“string2相等”,“int”:2,“數組”:[2,4,6],“東西”:{“關鍵”:“value2”}},{“字符串”:“string3”,“int”:3.,“數組”:[3.,6,9],“東西”:{“關鍵”:“value3”,“extra_key”:“extra_value3”}}]
要讀取該對象,請啟用多行模式:
創建臨時視圖multiLineJsonTable使用json選項(路徑=“/ tmp / multi-line.json”,多行=真正的)
瓦爾mdf=火花.讀.選項(“多行”,“真正的”).格式(“json”).負載(“/ tmp / multi-line.json”)mdf.顯示(假)
字符集顯
缺省情況下,自動檢測輸入文件的字符集。方法顯式指定字符集字符集
選擇:
火花.讀.選項(“字符集”,“UTF-16BE”).格式(“json”).負載(“fileInUTF16.json”)
一些支持的字符集包括:utf - 8
,UTF-16BE
,UTF-16LE
,utf - 16
,UTF-32BE
,UTF-32LE
,utf - 32
.有關Oracle Java SE支持的字符集的完整列表,請參見支持的編碼.