pyspark.sql.functions.from_json

pyspark.sql.functions. from_json ( col : ColumnOrName , schema : Union [ pyspark.sql.types.ArrayType , pyspark.sql.types.StructType , pyspark.sql.column.Column , str ] , options : Optional [ Dict [ str , str ] ] = None ) → pyspark.sql.column.Column [source]

将包含 JSON 字符串的列解析为一个 MapType ,键的类型为 StringType ,值的类型为 StructType ArrayType ,并使用指定的模式。对于无法解析的字符串,返回 null

在版本 2.1.0 中新增。

在 3.4.0 版本中更改: 支持 Spark Connect。

Parameters
col or str

JSON格式中的列或列名称

schema 数据类型 or str

一个 StructType、ArrayType 的 StructType 或带有 DDL 格式字符串的 Python 字符串文本,用于解析 json 列

options dict, optional

控制解析的选项。接受与json数据源相同的选项。查看 数据源选项 以获取您使用的版本。

Returns

从给定的JSON对象创建一个复杂类型的新列。

示例

>>> from pyspark.sql.types import *
>>> data = [(1, '''{"a": 1}''')]
>>> schema = StructType([StructField("a", IntegerType())])
>>> df = spark.createDataFrame(data, ("key", "value"))
>>> df.select(from_json(df.value, schema).alias("json")).collect()
[Row(json=Row(a=1))]
>>> df.select(from_json(df.value, "a INT").alias("json")).collect()
[Row(json=Row(a=1))]
>>> df.select(from_json(df.value, "MAP<STRING,INT>").alias("json")).collect()
[Row(json={'a': 1})]
>>> data = [(1, '''[{"a": 1}]''')]
>>> schema = ArrayType(StructType([StructField("a", IntegerType())]))
>>> df = spark.createDataFrame(data, ("key", "value"))
>>> df.select(from_json(df.value, schema).alias("json")).collect()
[Row(json=[Row(a=1)])]
>>> schema = schema_of_json(lit('''{"a": 0}'''))
>>> df.select(from_json(df.value, schema).alias("json")).collect()
[Row(json=Row(a=None))]
>>> data = [(1, '''[1, 2, 3]''')]
>>> schema = ArrayType(IntegerType())
>>> df = spark.createDataFrame(data, ("key", "value"))
>>> df.select(from_json(df.value, schema).alias("json")).collect()
[Row(json=[1, 2, 3])]