json(DataFrameReader)

載入 JSON 檔案並以 DataFrame. 預設支援 JSON 行(換行分隔 JSON)。 對於每個檔案只有一個記錄的 JSON,可以設定 multiLineTrue

schema 未指定,此函式會讀取一次輸入以決定輸入結構。

語法

json(path, schema=None, **options)

參數

參數 類型 說明
path 力量、列表或RDD 一個指向 JSON 資料集的路徑、一個路徑清單,或是一個包含 JSON 物件的字串的 RDD。
schema 結構類型或力量,選用 可選的輸入結構作為 StructType 物件或 DDL 格式的字串(例如 'col0 INT, col1 DOUBLE')。

退貨

DataFrame

Examples

把 DataFrame 寫進 JSON 檔案,然後讀回來。

import tempfile
with tempfile.TemporaryDirectory(prefix="json") as d:
    spark.createDataFrame(
        [{"age": 100, "name": "Hyukjin"}]
    ).write.mode("overwrite").format("json").save(d)

    spark.read.json(d).show()
    # +---+-------+
    # |age|   name|
    # +---+-------+
    # |100|Hyukjin|
    # +---+-------+

從多個目錄讀取 JSON。

from tempfile import TemporaryDirectory
with TemporaryDirectory(prefix="json2") as d1, TemporaryDirectory(prefix="json3") as d2:
    spark.createDataFrame(
        [{"age": 30, "name": "Bob"}]
    ).write.mode("overwrite").format("json").save(d1)
    spark.createDataFrame(
        [{"age": 25, "name": "Alice"}]
    ).write.mode("overwrite").format("json").save(d2)

    spark.read.json([d1, d2]).show()
    # +---+-----+
    # |age| name|
    # +---+-----+
    # | 25|Alice|
    # | 30|  Bob|
    # +---+-----+

用自訂架構閱讀 JSON。

import tempfile
with tempfile.TemporaryDirectory(prefix="json") as d:
    spark.createDataFrame(
       [{"age": 30, "name": "Bob"}]
    ).write.mode("overwrite").format("json").save(d)
    spark.read.json(d, schema="name STRING, age INT").show()
    # +----+---+
    # |name|age|
    # +----+---+
    # | Bob| 30|
    # +----+---+