Sandeep Samal:
val result = df.select($"seq_id", posexplode(array($"prod_id", $"prod_name")))
En ejemplo anterior posexplode no toma cualquier secuencia de nombres de columna en la matriz lateral (). Es obligatorio para codificar los nombres de columna. ¿Hay alguna manera de eliminar hardcoding y añadir cualquier número de columnas de forma dinámica?
Alexandros Biratsis:
Como se puede ver en la función de declaración array(cols: Column*): Column
podemos pasar uno o más col como parámetros para la función de matriz. Esto puede hacerse también de forma dinámica mediante la generación de una serie de columnas de una lista cadena arbitraria:
import org.apache.spark.sql.functions.{posexplode, col, array}
val cols = Seq("prod_id", "prod_name").map{col(_)}
val customArray = array(cols:_*)
df.select(customArray).show
Esto encerrar prod_id, prod_name
en una matriz y se utiliza array
la función como lo hizo anteriormente.