Transformación de tipos de datos complejos
Al trabajar con tipos de datos anidados, Azure Databricks optimiza determinadas transformaciones de manera inmediata. En los ejemplos de código siguientes se muestran patrones para trabajar con tipos de datos complejos y anidados en Azure Databricks.
Notación de puntos para acceder a datos anidados
Puede usar la notación de puntos (.
) para acceder a un campo anidado.
Python
df.select("column_name.nested_field")
SQL
SELECT column_name.nested_field FROM table_name
Seleccionar todos los campos anidados
Use el operador de factor de proporcionalidad (*
) para seleccionar todos los campos de un campo determinado.
Nota:
Esto solo desempaqueta los campos anidados en la profundidad especificada.
Python
df.select("column_name.*")
SQL
SELECT column_name.* FROM table_name
Crear un nuevo campo anidado
Use la función struct()
para crear un nuevo campo anidado.
Python
from pyspark.sql.functions import struct, col
df.select(struct(col("field_to_nest").alias("nested_field")).alias("column_name"))
SQL
SELECT struct(field_to_nest AS nested_field) AS column_name FROM table_name
Anidar todos los campos en una columna
Use el operador de factor de proporcionalidad (*
) para anidar todos los campos de un origen de datos como una sola columna.
Python
from pyspark.sql.functions import struct
df.select(struct("*").alias("column_name"))
SQL
SELECT struct(*) AS column_name FROM table_name
Selección de un campo con nombre de una columna anidada
Use corchetes []
para seleccionar campos anidados de una columna.
Python
from pyspark.sql.functions import col
df.select(col("column_name")["field_name"])
SQL
SELECT column_name["field_name"] FROM table_name
Explotar elementos anidados de un mapa o matriz
Use la función explode()
para desempaquetar valores de ARRAY
y columnas de tipo MAP
.
Las columnas ARRAY
almacenan valores como una lista. Cuando se desempaqueta con explode()
, cada valor se convierte en una fila de la salida.
Python
from pyspark.sql.functions import explode
df.select(explode("array_name").alias("column_name"))
SQL
SELECT explode(array_name) AS column_name FROM table_name
Las columnas MAP
almacenan valores como pares de clave-valor ordenados. Cuando se desempaqueta con explode()
, cada clave se convierte en una columna y los valores se convierten en filas.
Python
from pyspark.sql.functions import explode
df.select(explode("map_name").alias("column1_name", "column2_name"))
SQL
SELECT explode(map_name) AS (column1_name, column2_name) FROM table_name
Crear una matriz a partir de una lista o un conjunto
Use las funciones collect_list()
o collect_set()
para transformar los valores de una columna en una matriz. collect_list()
recopila todos los valores de la columna, mientras que collect_set()
solo recopila valores únicos.
Nota:
Spark no garantiza el orden de los elementos de la matriz resultante de ninguna operación.
Python
from pyspark.sql.functions import collect_list, collect_set
df.select(collect_list("column_name").alias("array_name"))
df.select(collect_set("column_name").alias("set_name"))
SQL
SELECT collect_list(column_name) AS array_name FROM table_name;
SELECT collect_set(column_name) AS set_name FROM table_name;
Selección de una columna de un mapa en una matriz
También puede usar la notación de puntos (.
) para tener acceso a los campos de los mapas contenidos en una matriz. Esto devuelve una matriz de todos los valores del campo especificado.
Tenga en cuenta la siguiente estructura de datos:
{
"column_name": [
{"field1": 1, "field2":"a"},
{"field1": 2, "field2":"b"}
]
}
Puede devolver los valores de field1
como una matriz con la consulta siguiente:
Python
df.select("column_name.field1")
SQL
SELECT column_name.field1 FROM table_name
Transformación de datos anidados en JSON
Use la función to_json
para convertir un tipo de datos complejo en JSON.
Python
from pyspark.sql.functions import to_json
df.select(to_json("column_name").alias("json_name"))
SQL
SELECT to_json(column_name) AS json_name FROM table_name
Para codificar todo el contenido de una consulta o DataFrame, combine esto con struct(*)
.
Python
from pyspark.sql.functions import to_json, struct
df.select(to_json(struct("*")).alias("json_name"))
SQL
SELECT to_json(struct(*)) AS json_name FROM table_name
Nota:
Azure Databricks también admite to_avro
y to_protobuf
para transformar tipos de datos complejos para la interoperabilidad con sistemas integrados.
Transformación de datos JSON en datos complejos
Use la función from_json
para convertir datos JSON en tipos de datos complejos nativos.
Nota:
Debe especificar el esquema para los datos JSON.
Python
from pyspark.sql.functions import from_json
schema = "column1 STRING, column2 DOUBLE"
df.select(from_json("json_name", schema).alias("column_name"))
SQL
SELECT from_json(json_name, "column1 STRING, column2 DOUBLE") AS column_name FROM table_name
Cuaderno: transformación de tipos de datos complejos
Los cuadernos siguientes proporcionan ejemplos para trabajar con tipos de datos complejos para Python, Scala y SQL.