JSON文件
你可以閱讀JSON文件單行的或多行模式。在單行模式下,一個文件可以分為許多部分並行和閱讀。在多行模式下,加載一個文件作為一個整體的實體不能是分裂。
為進一步的信息,請參閱JSON文件。
獲救的數據列
請注意
該特性支持磚運行時的8.2(不支持)及以上。
獲救的數據列確保你永遠不會失去或錯過在ETL數據。獲救的數據列不包含任何數據解析,要麼從給定的模式,因為它不見了,因為有一個類型不匹配,或者因為套管列的記錄或文件不匹配的模式。獲救的數據列作為一個JSON返回包含列獲救的blob,和源文件路徑的記錄(源文件路徑可以在磚運行時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”)
火花自動推斷模式。
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
。數據集的完整列表支持甲骨文Java SE,明白了支持的編碼。