JSON 檔案
您可以在單行或多行模式中讀取 JSON 檔案。 在單行模式中,檔案可以分割成許多部分,並以平行方式讀取。 在多行模式中,檔案會載入為整個實體,而且無法分割。
如需進一步資訊,請參閱 JSON 檔案。
選項。
如需支援的讀取和寫入選項,請參閱下列 Apache Spark 參考文章。
已修復的資料行
注意
Databricks Runtime 8.2 (EoS) 和更新版本支援此功能。
已修復的資料行可確保您在 ETL 期間永遠不會遺失或遺漏資料。 已修復的資料行包含任何未剖析的資料,可能是因為該資料從指定的結構描述中遺失,或是因為類型不符,或因為記錄或檔案中的資料行大小寫與結構描述中的資料不相符。 已修復的資料行會以 JSON blob 的形式傳回,其中包含已修復的資料行,以及記錄的來源檔案路徑。 若要從已修復的資料行中移除來源檔案路徑,您可以設定 SQL 組態 spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
。 您可以將選項 rescuedDataColumn
設定為資料行名稱 (例如使用 spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>)
的 _rescued_data
),以啟用已修復的資料行。
剖析記錄時,JSON 剖析器支援三種模式:PERMISSIVE
、DROPMALFORMED
和 FAILFAST
。 搭配使用 rescuedDataColumn
時,資料類型不符會導致記錄在 DROPMALFORMED
模式中捨棄或以 FAILFAST
模式擲回錯誤。 只有已損毀的記錄 (也就是不完整或格式錯誤的 JSON) 才會捨棄或擲回錯誤。 如果您在剖析 JSON 時使用選項 badRecordsPath
,則使用 rescuedDataColumn
時,資料類型不符不會視為不正確的記錄。 只有不完整且格式錯誤的 JSON 記錄會儲存在 badRecordsPath
中。
範例
單行模式
在此範例中,每行有一個 JSON 物件:
{"string":"string1","int":1,"array":[1,2,3],"dict": {"key": "value1"}}
{"string":"string2","int":2,"array":[2,4,6],"dict": {"key": "value2"}}
{"string":"string3","int":3,"array":[3,6,9],"dict": {"key": "value3", "extra_key": "extra_value3"}}
若要讀取 JSON 資料,請使用:
val df = spark.read.format("json").load("example.json")
Spark 會自動推斷結構描述。
df.printSchema
root
|-- array: array (nullable = true)
| |-- element: long (containsNull = true)
|-- dict: struct (nullable = true)
| |-- extra_key: string (nullable = true)
| |-- key: string (nullable = true)
|-- int: long (nullable = true)
|-- string: string (nullable = true)
多行模式
此 JSON 物件佔用多行:
[
{"string":"string1","int":1,"array":[1,2,3],"dict": {"key": "value1"}},
{"string":"string2","int":2,"array":[2,4,6],"dict": {"key": "value2"}},
{
"string": "string3",
"int": 3,
"array": [
3,
6,
9
],
"dict": {
"key": "value3",
"extra_key": "extra_value3"
}
}
]
若要讀取此物件,請啟用多行模式:
SQL
CREATE TEMPORARY VIEW multiLineJsonTable
USING json
OPTIONS (path="/tmp/multi-line.json",multiline=true)
Scala
val mdf = spark.read.option("multiline", "true").format("json").load("/tmp/multi-line.json")
mdf.show(false)
Charset 自動偵測
根據預設,系統會自動偵測輸入檔的字元集。 您可以使用 charset
選項明確指定字元集:
spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")
某些支援的字元集包括:UTF-8
、UTF-16BE
、UTF-16LE
、UTF-16
、UTF-32BE
、UTF-32LE
、UTF-32
。 如需 Oracle Java SE 支援之字元集的完整清單,請參閱支援的編碼 (英文)。
筆記本範例:讀取 JSON 檔案
下列筆記本示範單行模式和多行模式。