Compartir a través de


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.

Transformación de un cuaderno de Python de tipos de datos complejos

Obtener el cuaderno

Transformación de un cuaderno de Scala de tipos de datos complejos

Obtener el cuaderno

Transformación de un cuaderno de SQL de tipos de datos complejos

Obtener el cuaderno