共用方式為


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 剖析器支援三種模式: PERMISSIVEDROPMALFORMEDFAILFAST 。 搭配 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-16BEUTF-16LEUTF-16 、、 UTF-32BEUTF-32LEUTF-32 。 如需 Oracle JAVA SE 所支援之字元集的完整清單,請參閱 支援的編碼

筆記本範例:讀取 JSON 檔案

下列筆記本示範單行模式和多行模式。

讀取 JSON 檔案筆記本

取得筆記本