如何在PySpark中检查df1是否等于df2?

时间:2020-04-27 09:21:17

标签: dataframe join pyspark

df1.show()
+---------+
|Data_Type|
+---------+
|   string|
|   string|
|      int|
+---------+
df2.show()
+---------+
|Data_Type|
+---------+
|   string|
|   string|
|      int|
+---------+

我想将df1中的列与df2 [“ Column_name”]中的行进行比较(相等检查)。

我尝试使用连接来比较它们,即

df1.join(df2,on="Data_Type",how="left").join(df2,on="Data_Type",how="right")
if(df3.count() == df1.count() == df2.count()):
    print(True)

但是这不起作用,因为我在“ Data_Type”列下有重复的值,并且在加入后得到了叉积类型的输出,如下所示:

+---------+
|Data_Type|
+---------+
|      int|
|   string|
|   string|
|   string|
|   string|
|   string|
|   string|
|   string|
|   string|
+---------+

还有其他方法可以对数据帧进行相等性检查吗?

2 个答案:

答案 0 :(得分:1)

希望您在这些动荡的时期过得不错!

在将两个数据帧转换为集合后,您可以尝试将它们减去。 这样,您可以将结果转换为数据框。

    lst = []
    for row in set(df1.collect()) - set(df2.collect()):
         lst.append(row)
    spark.createDataFrame(lst)

此外,由于我们使用集合,因此如果您有多于一列,则在两个数据框中的顺序都没有关系。

希望这会有所帮助!

答案 1 :(得分:0)

在火花中使用exceptAll(保留重复项)(或)subtract

df1.show()
#+---------+
#|Data_Type|
#+---------+
#|   string|
#|   string|
#|      int|
#+---------+


df2.show()
#+---------+
#|Data_Type|
#+---------+
#|   string|
#|   string|
#|      int|
#+---------+

df1.exceptAll(df2).count()
df2.exceptAll(df1).count()
#0
df1.subtract(df2).count()
df2.subtract(df1).count()
#0