Saltar al contenido

DataFrames

Menú

Puedes leer sin crear un espacio. Créalo solo cuando quieras guardar.

Guardar progreso

Lección 4 de 5

explode, arrays, maps y structs

Arrays, structs, maps y VARIANT cubren contratos distintos de datos complejos sin perder el contexto de la fila padre.

17 min aprox.

Detalles

DataFrames, transformaciones y datos complejos

Domina las operaciones que aparecen en ETL real: joins, arrays, structs, ventanas y deduplicación.

Reto observable

Dado un dataset semiestructurado, publica una tabla normalizada con esquema explícito y demuestra unicidad de claves, cardinalidad y tratamiento de registros inválidos.

Al terminar podrás
  • Transformar columnas y filas con funciones nativas
  • Manipular arrays, maps y structs
  • Combinar y deduplicar datasets de forma determinista
Prerrequisitos
m03
Última revisión
25 ago 2026
Nivel
Associate
Ruta relacionada
core
Dominios blueprint
Data Transformation and Modeling · PySpark DataFrames
Estado
Revisión editorial interna
Fuentes principales
PySpark DataFrames · DataFrame transformations
Reportar un error
04
Diagnóstico

explode, arrays, maps y structs

Arrays, structs, maps y VARIANT cubren contratos distintos de datos complejos sin perder el contexto de la fila padre.

explode crea una fila por elemento; explode_outer conserva la fila cuando la colección es null o vacía. Los campos de un struct se seleccionan con notación de punto y transform procesa arrays sin expandirlos. Para un esquema conocido que necesita estadísticas y layout, un struct tipado sigue siendo la opción más explícita.

VARIANT permite almacenar JSON semiestructurado con codificación optimizada en Databricks Runtime 15.3 o superior cuando los campos cambian con frecuencia. No sustituye el modelado: las columnas VARIANT no son claves de particionado o clustering ni se agrupan u ordenan directamente; proyecta a columnas tipadas los campos usados por contratos y consultas críticas y verifica compatibilidad de runtime/protocolo.

PySparkNormalizar líneas de pedido
lines = (raw
  .select("order_id", F.explode_outer("items").alias("item"))
  .select("order_id", F.col("item.sku").alias("sku"), F.col("item.qty").alias("qty")))

Decide si una fila con sku null debe ir a cuarentena.

¿Cuándo elegir explode_outer?

Profundiza

Los tipos complejos conservan estructura: un struct agrupa campos con esquema, un array mantiene una secuencia y un map asocia claves con valores. No es necesario convertir JSON a cadenas ni explotar todo inmediatamente. Las funciones de orden superior transform, filter, exists y aggregate operan dentro de un array preservando la fila padre; la notación de campo navega structs; element_at consulta colecciones. explode cambia el grain al crear filas y, por tanto, exige conservar claves del padre. explode_outer mantiene una representación cuando la colección es null o vacía. Elegir entre transformación anidada y normalización depende del consumidor y de la semántica, no de una limitación de Spark.

Struct

Valor compuesto con campos nombrados y tipos definidos dentro de una columna.

Permite conservar jerarquía y seleccionar atributos sin perder el contrato.
Función de orden superior

Expresión que aplica una operación a elementos de una colección sin convertirlos en filas independientes.

Preserva grain y suele simplificar transformaciones de arrays.
explode_outer

Generador que expande elementos y conserva el padre con null cuando la colección no aporta elementos.

Evita perder entidades padre cuando la ausencia de detalles tiene significado.
Resumen

Puntos clave

  • explode cambia cardinalidad
  • Struct favorece contrato conocido
  • VARIANT conserva flexibilidad; proyecta campos críticos

Evita

  • Perder order_id al explotar items
  • Guardar todo como VARIANT y esperar estadísticas, clustering o GROUP BY directos

Fuente revisada · vista externa

Azure Databricks Hands-on

Azure Databricks Hands-on · commit a91650b

HandsOn.dbc

Archivo importable

Este notebook se abre desde su fuente revisada

El repositorio no permite republicar su contenido dentro de Lakehouse Lab. Conservamos la misma experiencia lateral, la ruta exacta y el commit auditado, y dejamos la lectura en GitHub para respetar la autoría.

Autor
Tsuyoshi Matsuzaki
Licencia
No verificada
Formato
dbc
Abrir / descargar .dbc

Módulo 04

Contenido del módulo