json (DataFrameReader)

加载 JSON 文件并将结果返回为 .DataFrame 默认情况下支持 JSON 行(换行分隔的 JSON)。 对于每个文件有一条记录的 JSON,请将 multiLine 选项设置为 True

如果未 schema 指定,此函数将读取一次输入以确定输入架构。

Syntax

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

参数

参数 类型 说明
path str、list 或 RDD JSON 数据集的路径、路径列表或存储 JSON 对象的字符串的 RDD。
schema StructType 或 str,可选 可选输入架构作为 StructType 对象或 DDL 格式的字符串(例如 'col0 INT, col1 DOUBLE')。

退货

DataFrame

示例

将 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|
    # +----+---+