Aller au contenu principal

from_json

Analyse une colonne contenant une chaîne JSON en un MapType avec StringType comme type de clés, StructType ou ArrayType avec le schéma spécifié. Retourne null, dans le cas d'une chaîne de caractères impossible à analyser.

Syntaxe

Python
from pyspark.sql import functions as sf

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

parameter

parameter

Type

Description

col

pyspark.sql.Column ou str

Une colonne ou un nom de colonne au format JSON.

schema

DataType ou str

Un StructType, un ArrayType de StructType ou un littéral de chaîne Python avec une chaîne formatée DDL à utiliser lors de l'analyse de la colonne JSON.

options

dictionnaire, facultatif

Options pour contrôler l'analyse. Accepte les mêmes options que la source de données JSON.

parameter

Type

Description

col

pyspark.sql.Column ou str

Une colonne ou un nom de colonne au format JSON.

schema

DataType ou str

Un StructType, un ArrayType de StructType ou un littéral de chaîne Python avec une chaîne formatée DDL à utiliser lors de l'analyse de la colonne JSON.

options

dictionnaire, facultatif

Options pour contrôler l'analyse. Accepte les mêmes options que la source de données JSON.

Renvoie

pyspark.sql.Column: une nouvelle colonne de type complexe à partir de l'objet JSON donné.

Exemples

Exemple 1 : Analyse JSON avec un schéma spécifié

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}|
+----+

Exemple 2 : Analyse de JSON avec une chaîne formatée en DDL

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}|
+----+

Exemple 3 : Analyse du JSON en un 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}|
+--------+

Exemple 4 : Analyse du JSON en un ArrayType de StructType

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}]|
+-----+

Exemple 5 : Analyse de JSON en un 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]|
+---------+

Exemple 6 : Analyse de JSON avec des options spécifiées

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}|
+---------+----------------+----------------+