メインコンテンツまでスキップ

from_json

JSON 文字列を含む列を、指定されたスキーマを使用して、キー タイプとしてStringTypeを持つMapTypeStructType 、またはArrayTypeに解析します。解析できない文字列の場合はnullを返します。

構文

Python
from pyspark.sql import functions as sf

sf.from_json(col, schema, options=None)

パラメーター

パラメーター

Type

説明

col

pyspark.sql.Column または文字列

JSON 形式の列または列名。

schema

DataType または文字列

JSON列の解析時に使用する StructType、StructType の ArrayType、または DDL 形式の文字列を含むPython文字列リテラル。

options

辞書(オプション)

解析を制御するためのオプション。JSONデータソースと同じオプションを受け入れます。

戻り値

pyspark.sql.Column: 指定された JSON オブジェクトからの複合型の新しい列。

例1 : 指定されたスキーマでJSONを解析する

Python
import pyspark.sql.functions as sf
from pyspark.sql.types import StructType, StructField, IntegerType
schema = StructType([StructField("a", IntegerType())])
df = spark.createDataFrame([(1, '''{"a": 1}''')], ("key", "value"))
df.select(sf.from_json(df.value, schema).alias("json")).show()
Output
+----+
|json|
+----+
| {1}|
+----+

例2 : DDL形式の文字列でJSONを解析する

Python
import pyspark.sql.functions as sf
df = spark.createDataFrame([(1, '''{"a": 1}''')], ("key", "value"))
df.select(sf.from_json(df.value, "a INT").alias("json")).show()
Output
+----+
|json|
+----+
| {1}|
+----+

例3 : JSONをMapTypeに解析する

Python
import pyspark.sql.functions as sf
df = spark.createDataFrame([(1, '''{"a": 1}''')], ("key", "value"))
df.select(sf.from_json(df.value, "MAP<STRING,INT>").alias("json")).show()
Output
+--------+
| json|
+--------+
|{a -> 1}|
+--------+

例4 : JSONをStructTypeのArrayTypeに解析する

Python
import pyspark.sql.functions as sf
from pyspark.sql.types import ArrayType, StructType, StructField, IntegerType
schema = ArrayType(StructType([StructField("a", IntegerType())]))
df = spark.createDataFrame([(1, '''[{"a": 1}]''')], ("key", "value"))
df.select(sf.from_json(df.value, schema).alias("json")).show()
Output
+-----+
| json|
+-----+
|[{1}]|
+-----+

例5 : JSONをArrayTypeに解析する

Python
import pyspark.sql.functions as sf
from pyspark.sql.types import ArrayType, IntegerType
schema = ArrayType(IntegerType())
df = spark.createDataFrame([(1, '''[1, 2, 3]''')], ("key", "value"))
df.select(sf.from_json(df.value, schema).alias("json")).show()
Output
+---------+
| json|
+---------+
|[1, 2, 3]|
+---------+

例6 : 指定されたオプションでJSONを解析する

Python
import pyspark.sql.functions as sf
df = spark.createDataFrame([(1, '''{a:123}'''), (2, '''{"a":456}''')], ("key", "value"))
parsed1 = sf.from_json(df.value, "a INT")
parsed2 = sf.from_json(df.value, "a INT", {"allowUnquotedFieldNames": "true"})
df.select("value", parsed1, parsed2).show()
Output
+---------+----------------+----------------+
| value|from_json(value)|from_json(value)|
+---------+----------------+----------------+
| {a:123}| {NULL}| {123}|
|{"a":456}| {456}| {456}|
+---------+----------------+----------------+