所以我一直在寻找不同的方法来比较两个没有键列的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呢?
1条答案
按热度按时间bfhwhh0e1#
可以对Dataframe运行减号查询