簡體   English   中英

Pyspark Dataframe - 如何根據作為輸入的列數組連接列

[英]Pyspark Dataframe - How to concatenate columns based on array of columns as input

我有 10 列的數據框,並且想要執行函數 - 基於作為輸入的列數組的連接:

arr = ["col1", "col2", "col3"]

這是目前的情況:

newDF = rawDF.select(concat(col("col1"), col("col2"), col("col3") )).exceptAll(updateDF.select( concat(col("col1"), col("col2"), col("col3") ) ) )

還:

df3 = df2.join(df1, concat( df2.col1, df2.col2, df2.col3, df2.col3 ) == df1.col5 ) 

但是我想根據輸入數組創建一個循環或函數來執行此操作(而不是像現在這樣對其進行硬編碼)。

什么是最好的方法?

您可以使用 (*) 解壓縮 cols。 在 pyspark.sql 文檔中,如果任何函數有 (*cols),則表示您可以解壓縮 cols。 對於連接:

pyspark.sql.functions.concat(*cols)

from pyspark.sql import functions as F
arr = ["col1", "col2", "col3"]
newDF = rawDF.select(F.concat(*(F.col(col) for col in arr))).exceptAll(updateDF.select(F.concat(*(F.col(col) for col in arr))))

對於聯接:

arr=['col1','col2','col3']
df3 = df2.join(df1, F.concat(*(F.col(col) for col in arr)) == df1.col5 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM