簡體   English   中英

是否有任何替代完全外連接來比較沒有鍵列的 PySpark 數據幀?

[英]Are there any alternatives to a full outer join for comparing PySpark dataframes with no key columns?

所以我一直在尋找不同的方法來比較兩個沒有關鍵列的 PySpark 數據幀。

假設我有兩個數據框 df1 和 df2,列 col1、col2、col3。

這個想法是我會得到一個 output dataframe 包含來自 df1 的行,這些行與 df2 中的任何行都不匹配,反之亦然。 我還想要某種標志,這樣我就可以區分來自 df1 的行和來自 df2 的行。

到目前為止,我已經將完整的外部聯接視為方法,例如:

columns = df1.columns
df1 = df1.withColumn("df1_flag", lit("X"))
df2 = df2.withColumn("df2_flag", lit("X"))
df3 = df1.join(df2, columns, how = 'full')\
    .withColumn("FLAG", when(col("df1_flag").isNotNull() & col("df2_flag").isNotNull(), "MATCHED")\
    .otherwise(when(col("df1_flag").isNotNull(), "df1").otherwise("df2"))).drop("df1_flag","df2_flag")
df4 = df3.filter(df3.flag != "MATCHED")

全外連接的問題是我可能需要處理一些非常大的數據幀(100 萬+條記錄),我擔心效率。 我曾考慮過使用反左連接和反右連接然后組合,但仍然存在效率問題。

有沒有我在這里忽略的比較方法對於非常大的數據幀可能更有效?

您可以對數據框運行減號查詢

Mismatvhed_df1 = df1.exceptAll(df2)
Mismatvhed_df2 = df2.exceptAll(df1)

暫無
暫無

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

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