от
val result = df.select($"seq_id", posexplode(array($"prod_id", $"prod_name")))
В приведенном выше примере posexplode не принимает никакой последовательности имен столбцов в side array (). Обязательно указывать имена столбцов. Есть ли способ удалить жесткое кодирование и динамически добавить любое количество столбцов?              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
Как вы можете видеть из объявления функции
array(cols: Column*): Column
, мы можем передать один или несколько столбцов в качестве параметров для функции массива. Это также можно сделать динамически, генерируя массив столбцов из произвольного списка строк:
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
Это будет заключить
prod_id, prod_name
в массив и использовать функцию
array
, как вы делали ранее.     
...