2
讓我們說我有星火2個DataFramesPySpark數據框 - 加入多個列的動態
firstdf = sqlContext.createDataFrame([{'firstdf-id':1,'firstdf-column1':2,'firstdf-column2':3,'firstdf-column3':4}, \
{'firstdf-id':2,'firstdf-column1':3,'firstdf-column2':4,'firstdf-column3':5}])
seconddf = sqlContext.createDataFrame([{'seconddf-id':1,'seconddf-column1':2,'seconddf-column2':4,'seconddf-column3':5}, \
{'seconddf-id':2,'seconddf-column1':6,'seconddf-column2':7,'seconddf-column3':8}])
現在我想通過多列加入他們(任何數量的比一個大)
什麼我是第一個DataFrame的一列數組和第二個DataFrame的一列數組,這些數組具有相同的大小,並且我想通過這些數組中指定的列進行連接。例如:
columnsFirstDf = ['firstdf-id', 'firstdf-column1']
columnsSecondDf = ['seconddf-id', 'seconddf-column1']
由於這些陣列具有可變大小,我不能使用這種方法:
from pyspark.sql.functions import *
firstdf.join(seconddf, \
(col(columnsFirstDf[0]) == col(columnsSecondDf[0])) &
(col(columnsFirstDf[1]) == col(columnsSecondDf[1])), \
'inner'
)
有什麼辦法,我可以加入多個列動態?由於您使用的邏輯就足以提供的條件列表沒有&
操作
firstdf.join(
seconddf,
[col(f) == col(s) for (f, s) in zip(columnsFirstDf, columnsSecondDf)],
"inner"
)
:
爲什麼不使用for循環?您還可以使用itertools庫在您的列表之間執行笛卡爾產品 – GwydionFR