val result = df.select($"seq_id", posexplode(array($"prod_id", $"prod_name")))
在上面的示例中,poseexplode 不采用 side array() 中的任何列名称序列。必须对列名称进行硬编码。有没有办法删除硬编码并动态添加任意数量的列?
最佳答案
从函数 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
函数。
关于java - Spark Sql 中的poseexplode() 的替代方案是什么,因为它不动态采用可变数量的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56894144/