scala - 将列值列表传递给火花数据框作为新列
问题描述
我正在尝试添加一个新列来触发数据框,如下所示:
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。
请建议。
解决方案
我们可以使用map
andconcat_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|
//+---+---+---+---+----------------------------------------------------------------+
推荐阅读
- reactjs - 有没有办法用从后端收到的数据更新表
- artifactory - 有没有办法在 Artifactory 构建信息中引用依赖项而不在本地下载依赖项?
- powershell - 为什么 powershell 抱怨注释行?
- mariadb - 如何处理以前的 Flyway 迁移在较新的数据库版本中变得无效?
- sql - SQL 显示计数中的第一个和最后一个值
- python - Python ExcelWriter 格式化“所有边框”
- javascript - 具有来自firebase的对象子对象的未定义值
- r - 分隔文件读取到列表而不是 df
- sql - 我怎样才能使用这种索引?
- apache-spark - 改进 parquet 中多个 spark 数据集的读取和连接