Puedes leer sin crear un espacio. Créalo solo cuando quieras guardar.
Guardar progresoLecció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.
04Diagnósticoexplode, arrays, maps y structs
Arrays, structs, maps y VARIANT cubren contratos distintos de datos complejos sin perder el contexto de la fila padre.
+
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.
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.
Valor compuesto con campos nombrados y tipos definidos dentro de una columna.
Permite conservar jerarquía y seleccionar atributos sin perder el contrato.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.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