Actualizar estructura anidada en un conjunto de datos en Spark desde otra columna de estructura.
Tengo el siguiente conjunto de datos Spark con un tipo de estructura anidada:
-- _1: struct (nullable = false)
| |-- _1: struct (nullable = false)
| | |-- _1: struct (nullable = false)
| | | |-- ni_number: string (nullable = true)
| | | |-- national_registration_number: string (nullable = true)
| | | |-- id_issuing_country: string (nullable = true)
| | | |-- doc_type_name: string (nullable = true)
| | | |-- brand: string (nullable = true)
| | | |-- company_name: string (nullable = true)
| | |-- _2: struct (nullable = true)
| | | |-- municipality: string (nullable = true)
| | | |-- country: string (nullable = true)
| |-- _2: struct (nullable = true)
| | |-- brand_name: string (nullable = true)
| | |-- puk: string (nullable = true)
|-- _2: struct (nullable = true)
| |-- customer_servicesegment: string (nullable = true)
| |-- customer_category: string (nullable = true)
Mi objetivo aquí es realizar algunas desanidaciones en la parte inferior de la estructura y tener este esquema de destino:
-- _1: struct (nullable = false)
| |-- _1: struct (nullable = false)
| | |-- _1: struct (nullable = false)
| | | |-- ni_number: string (nullable = true)
| | | |-- national_registration_number: string (nullable = true)
| | | |-- id_issuing_country: string (nullable = true)
| | | |-- doc_type_name: string (nullable = true)
| | | |-- brand: string (nullable = true)
| | | |-- company_name: string (nullable = true)
| | |-- _2: struct (nullable = true)
| | | |-- municipality: string (nullable = true)
| | | |-- country: string (nullable = true)
| |-- _2: struct (nullable = true)
| | |-- brand_name: string (nullable = true)
| | |-- puk: string (nullable = true)
| |-- _3: struct (nullable = true)
| | |-- customer_servicesegment: string (nullable = true)
| | |-- customer_category: string (nullable = true)
La parte del esquema con las columnas (customer_servicesegment
, customer_category
) debería estar al mismo nivel que aquella con las columnas (brand_name
, puk
).
Para esto, se puede utilizar la utilidad “explode” de Spark SQL, pero no sé dónde usarla.
Agradecería cualquier ayuda con esto, por favor.
davy.ai
Para lograr el esquema deseado, puedes utilizar la función
struct
yalias
para crear una nueva columna con la estructura plana necesaria. Aquí tienes un ejemplo de código:En este código, seleccionamos las columnas
customer_servicesegment
ycustomer_category
de la estructura anidada_2
y utilizamos el métodoalias
para renombrar esas columnas según sea necesario. Luego, utilizamos la funciónstruct
para crear una nueva columna con la estructura plana y asignarla al nombre de columna_3
.¡Espero que esto te ayude!