Spark SQL - выбрать все столбцы при обновлении одного - PullRequest
1 голос
/ 01 ноября 2019

У меня есть фрейм данных со многими столбцами, и я хочу внести некоторые изменения в определенный столбец, оставив все остальные столбцы без изменений.

Более конкретно, я хочу explode столбец.

В настоящее время я указываю все имена столбцов в select.

df.select($"col1", $"col2", ..., $"colN", explode($"colX"))

Но я бы предпочел не указывать все имена столбцов.

Я думаю, я мог бы использовать df.columns, отфильтруйте тот, который я хочу взорвать, и используйте этот массив в select.

Есть ли более чистый способ добиться этого?

1 Ответ

1 голос
/ 01 ноября 2019

Вот один из способов использования filterNot. exp_col - это имя столбца, который вы хотите использовать с explode:

import org.apache.spark.sql.functions.explode

val cols= df.columns.filterNot(_ == "exp_col").map(col(_)) :+ explode($"exp_col")

df.select(cols:_*).show

С помощью filterNot мы создаем список с элементами, которые мы не хотим применятьexplode к. Затем мы объединяем их все вместе с :+ explode($"exp_col").

...