对于比较没有键列的pysparkDataframe,除了完整的外部连接之外,还有其他方法吗?

5ktev3wc  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(306)

所以我一直在寻找不同的方法来比较两个没有键列的pysparkDataframe。
假设我有两个Dataframe,df1和df2,有col1,col2,col3列。
其思想是,我将得到一个输出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")

完全外部连接的问题是,我可能需要处理一些非常大的Dataframe(100多万条记录),我担心效率。我曾经考虑过使用一个反左连接和一个反右连接,然后合并,但是仍然存在效率问题。
在这里,有没有什么比较方法可以更有效地处理非常大的Dataframe呢?

bfhwhh0e

bfhwhh0e1#

可以对Dataframe运行减号查询

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

相关问题