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|
+---------+
还有其他方法可以对数据帧进行相等性检查吗?
答案 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