首页 > 解决方案 > 将列值列表传递给火花数据框作为新列

问题描述

我正在尝试添加一个新列来触发数据框,如下所示:

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。

请建议。

标签: scalaapache-spark

解决方案


我们可以使用mapandconcat_ws ||创建新列并在 concat 数据上应用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|
//+---+---+---+---+----------------------------------------------------------------+

推荐阅读