¿Cuál es la alternativa a posexplode () en SQL como la chispa que no tiene número variable de argumentos de forma dinámica?

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_nameen una matriz y se utiliza arrayla función como lo hizo anteriormente.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=239395&siteId=1
Recomendado
Clasificación