JSON 檔案
您可以在單行或 多行 模式中 讀取 JSON 檔案。 在單行模式中,檔案可以分割成許多部分,並以平行方式讀取。 在多行模式中,檔案會載入為整個實體,而且 無法 分割。
如需詳細資訊,請參閱 JSON 檔案 。
選項。
如需支援的讀取和寫入選項,請參閱下列 Apache Spark 參考文章。
已獲救的資料行
注意
Databricks Runtime 8.2 (不支援) 和更新版本支援 此功能。
已獲救的資料行可確保您在 ETL 期間永遠不會遺失或錯過資料。 已獲救的資料行包含任何未剖析的資料,可能是因為該資料從指定的架構中遺失,或是因為類型不符,或因為記錄或檔案中的資料行大小寫與架構中的資料不相符。 已獲救的資料行會以 JSON Blob 的形式傳回,其中包含已獲救的資料行,以及記錄的來源檔案路徑。 若要從已獲救的資料行中移除來源檔案路徑,您可以設定 SQL 組態 spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
。 您可以將 選項 rescuedDataColumn
設定為數據行名稱,例如 _rescued_data
,以 spark.read.option("rescuedDataColumn", "_rescued_data").format("json").load(<path>)
啟用已獲救的資料行。
剖析記錄時,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
指定 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 檔案
下列筆記本示範單行模式和多行模式。