Передать список значений столбцов в спарк-фрейм данных как новый столбец - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь добавить новый столбец для спаркфрейма данных, как показано ниже:

val abc = [a,b,c,d]   ---  List of columns

Я пытаюсь передать приведенный выше список значений столбца как новый столбец в фрейм данных и пытаюсь выполнить sha2 для этого нового столбца. и пытается сделать varchar (64).

source = source.withColumn("newcolumn", sha2(col(abc), 256).cast('varchar(64)'))

Это соответствует, и ошибка времени выполнения я получаю как:

Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve 'abc' given input 
columns:

Ожидаемый вывод должен быть кадром данных с newcolum в качестве столбца имя и значение столбца как varchar64 с sha2 конкатенации массива строк с ||.

Пожалуйста, предложите.

1 Ответ

0 голосов
/ 23 апреля 2020

Мы можем использовать map и concat_ws || для создания нового столбца и применять sha2 () к конкататным данным.

val abc = Seq("a","b","c","d")
val df=Seq(((1),(2),(3),(4))).toDF("a","b","c","d")
df.withColumn("newColumn",sha2(concat_ws("||",  abc.map(c=> col(c)):_*),256)).show(false)
//+---+---+---+---+----------------------------------------------------------------+
//|a  |b  |c  |d  |newColumn                                                       |
//+---+---+---+---+----------------------------------------------------------------+
//|1  |2  |3  |4  |20a5b7415fb63243c5dbacc9b30375de49636051bda91859e392d3c6785557c9|
//+---+---+---+---+----------------------------------------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...