共用方式為


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 剖析器支援三種模式: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 選項明確指定字元集:

spark.read.option("charset", "UTF-16BE").format("json").load("fileInUTF16.json")

某些支援的字元集包括:UTF-8UTF-16BEUTF-16LEUTF-16UTF-32BEUTF-32LEUTF-32。 如需 Oracle Java SE 支援之字元集的完整清單,請參閱支援的編碼 (英文)。

筆記本範例:讀取 JSON 檔案

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

讀取 JSON 檔案筆記本

取得筆記本