val result = df.select($"seq_id", posexplode(array($"prod_id", $"prod_name")))在上面的示例中,posexplode 沒(méi)有在 side array() 中采用任何列名序列。必須對(duì)列名進(jìn)行硬編碼。有沒(méi)有辦法刪除硬編碼并動(dòng)態(tài)添加任意數(shù)量的列?
1 回答

收到一只叮咚
TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
從函數(shù)聲明 array(cols: Column*): Column中可以看出,我們可以傳遞一個(gè)或多個(gè) col 作為數(shù)組函數(shù)的參數(shù)。這也可以通過(guò)從任意字符串列表生成列數(shù)組來(lái)動(dòng)態(tài)完成:
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
這將包含在一個(gè)數(shù)組中,并像您之前那樣prod_id, prod_name使用函數(shù)。array
添加回答
舉報(bào)
0/150
提交
取消