val result = df.select($"seq_id", posexplode(array($"prod_id", $"prod_name")))在上面的示例中,posexplode 没有在 side array() 中采用任何列名序列。必须对列名进行硬编码。有没有办法删除硬编码并动态添加任意数量的列?
1 回答
收到一只叮咚
TA贡献1821条经验 获得超5个赞
从函数声明 array(cols: Column*): Column中可以看出,我们可以传递一个或多个 col 作为数组函数的参数。这也可以通过从任意字符串列表生成列数组来动态完成:
import org.apache.spark.sql.functions.{posexplode, col, array}
val cols = Seq("prod_id", "prod_name").map{col(_)}
val customArray = array(cols:_*)
df.select(customArray).show
这将包含在一个数组中,并像您之前那样prod_id, prod_name使用函数。array
添加回答
举报
0/150
提交
取消
