val result = df.select($"seq_id", posexplode(array($"prod_id", $"prod_name")))
在上面的示例中,posexplode在side array()中不采用任何列名序列。必须对列名称进行硬编码。有什么方法可以删除硬编码并动态添加任意数量的列?
答案 0 :(得分:1)
从函数declaration 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
函数。