簡體   English   中英

PySpark DataFrame-動態連接多個列

[英]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.

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