Compartir vía


from_json

Analiza una columna que contiene una cadena JSON en con MapTypeStringType como tipo StructType de claves o ArrayType con el esquema especificado. Devuelve null, en el caso de una cadena no analizable.

Syntax

from pyspark.sql import functions as sf

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

Parámetros

Parámetro Tipo Description
col pyspark.sql.Column o str Un nombre de columna o columna en formato JSON.
schema DataType o str Un StructType, ArrayType de StructType o literal de cadena de Python con una cadena con formato DDL que se usará al analizar la columna json.
options dict, opcional Opciones para controlar el análisis. Acepta las mismas opciones que el origen de datos json.

Devoluciones

pyspark.sql.Column: una nueva columna de tipo complejo a partir de un objeto JSON determinado.

Examples

Ejemplo 1: Análisis de JSON con un esquema especificado

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()
+----+
|json|
+----+
| {1}|
+----+

Ejemplo 2: Análisis de JSON con una cadena con formato DDL

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()
+----+
|json|
+----+
| {1}|
+----+

Ejemplo 3: Análisis de JSON en un MapType

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()
+--------+
|    json|
+--------+
|{a -> 1}|
+--------+

Ejemplo 4: Análisis de JSON en un arrayType de StructType

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()
+-----+
| json|
+-----+
|[{1}]|
+-----+

Ejemplo 5: Análisis de JSON en un arrayType

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()
+---------+
|     json|
+---------+
|[1, 2, 3]|
+---------+

Ejemplo 6: Análisis de JSON con opciones especificadas

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()
+---------+----------------+----------------+
|    value|from_json(value)|from_json(value)|
+---------+----------------+----------------+
|  {a:123}|          {NULL}|           {123}|
|{"a":456}|           {456}|           {456}|
+---------+----------------+----------------+