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
提交
取消