[英]PySpark DataFrame - Join on multiple columns dynamically
假設我在Spark上有兩個DataFrame
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"
)
由於您使用邏輯,因此無需提供&
運算符就可以提供條件列表。
@Mohan對不起,我沒有聲譽可做“添加評論”。 在兩個數據框上具有相同的列,使用這些列創建列表並在聯接中使用
col_list=["id","column1","column2"]
firstdf.join( seconddf, col_list, "inner")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.