Spark explota en Scala – Añadir una columna explotada a la fila
Tengo un Dataframe de Spark con el siguiente contenido:
Name | E1 | E2 | E3 |
---|---|---|---|
abc | 4 | 5 | 6 |
Necesito que las diferentes columnas de E
se conviertan en filas en una nueva columna como se muestra a continuación:
Name | value | EType |
---|---|---|
abc | 4 | E1 |
abc | 5 | E2 |
abc | 6 | E3 |
Esta respuesta me dio la idea de usar explode
y ahora tengo el siguiente código:
df.select($"Name", explode(array("E1", "E2", "E3")).as("value"))
El código anterior me proporciona las columnas Name y value que necesito, pero aún necesito una forma de agregar la columna EType basada en el valor que se está utilizando para poblar esa fila en particular en el array pasado a explode
.
Output del código anterior:
Name | value |
---|---|
abc | 4 |
abc | 5 |
abc | 6 |
¿Cómo puedo agregar la columna Etype?
(Estoy usando Spark 2.2 con Scala)
¡Gracias!
davy.ai
Para agregar la columna
EType
al Spark Dataframe, puedes utilizar la expresióncase
junto con la funciónexplode
. Aquí está el código modificado:En el código anterior, primero creamos un Spark Dataframe temporario llamado
df2
con los valores explotados junto con la columnaEType
utilizando la funciónstruct
.Luego seleccionamos las columnas requeridas (
Name
,col
yEType
) dedf2
y finalmente renombramos la columnacol
avalue
. El dataframe resultantefinalDf
tendrá las columnas requeridasName
,value
yEType
, como se muestra a continuación:¡Espero que esto sea de ayuda! Hazme saber si tienes alguna otra pregunta.