JSON文件

你可以閱讀JSON文件單行的多行模式。在單行模式下,一個文件可以分為許多部分並行和閱讀。在多行模式下,加載一個文件作為一個整體的實體不能是分裂。

為進一步的信息,請參閱JSON文件

選項

看到下麵的Apache火花參考文章支持讀寫選項。

獲救的數據列

請注意

該特性支持磚運行時的8.2(不支持)及以上。

獲救的數據列確保你永遠不會失去或錯過在ETL數據。獲救的數據列不包含任何數據解析,要麼從給定的模式,因為它不見了,因為有一個類型不匹配,或者因為套管列的記錄或文件不匹配的模式。獲救的數據列作為一個JSON返回包含列獲救的blob,和源文件路徑的記錄(源文件路徑可以在磚運行時8.3及以上)。刪除源文件路徑從獲救的數據列,您可以設置SQL配置spark.conf.set (“spark.databricks.sql.rescuedDataColumn.filePath.enabled”,“假”)。您可以通過設置啟用獲救的數據列選項rescuedDataColumn列的名稱,例如_rescued_dataspark.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”)

火花自動推斷模式。

dfprintSchema
|——數組:數組(可以為空=真正的)||——元素:(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。數據集的完整列表支持甲骨文Java SE,明白了支持的編碼

筆記本

以下筆記本演示單行和多行模式。

讀取JSON文件的筆記本

在新標簽頁打開筆記本