如何将列列表传入Databricks的struct()函数构建结构体
如何通过列列表调用Databricks的struct()函数
你需要先将字符串类型的列名列表转换为Column对象的序列,再传递给struct()函数——因为struct()的参数要求是Column类型,而非原始字符串。
解决代码示例
import org.apache.spark.sql.functions.{col, struct} val keyList = List("key1", "key2") // 将字符串列名转换为Column对象集合 val keyCols = keyList.map(col) // 两种可行调用方式: // 方式1:利用可变参数语法(:_*)将序列转为可变参数 val resultDF1 = df.select(struct(keyCols: _*).as("key")) // 方式2:直接传递Column序列(struct()有接受Seq[Column]的重载方法) val resultDF2 = df.select(struct(keyCols).as("key"))
关键说明
你之前尝试keyList:_*失败的核心原因是:struct()不接受字符串类型的可变参数,只接受Column类型参数。先通过col()函数把每个列名字符串转为Column对象后,再用:_*转换为可变参数,或者直接传递Column序列,就能实现用列表生成结构体的需求。
内容的提问来源于stack exchange,提问作者traase
相关产品推荐
相关产品推荐

