Dataframe 如何在PySpark中检查df1是否等于df2?
我想比较(相等检查)df1中的列和df2[“Column_name”]中的行 我试着用连接来比较它们,例如Dataframe 如何在PySpark中检查df1是否等于df2?,dataframe,join,pyspark,Dataframe,Join,Pyspark,我想比较(相等检查)df1中的列和df2[“Column_name”]中的行 我试着用连接来比较它们,例如 df1.show() +---------+ |Data_Type| +---------+ | string| | string| | int| +---------+ df2.show() +---------+ |Data_Type| +---------+ | string| | string| | int| +---------+ 但这不起作
df1.show()
+---------+
|Data_Type|
+---------+
| string|
| string|
| int|
+---------+
df2.show()
+---------+
|Data_Type|
+---------+
| string|
| string|
| int|
+---------+
但这不起作用,因为我在“Data_Type”列下有重复的值,并且在按如下方式加入后,我得到了一种类似于叉积的输出:
df1.join(df2,on="Data_Type",how="left").join(df2,on="Data_Type",how="right")
if(df3.count() == df1.count() == df2.count()):
print(True)
是否有其他方法可以对数据帧执行相等性检查?在spark中使用exceptAll
(保留重复项)(或)
+---------+
|Data_Type|
+---------+
| int|
| string|
| string|
| string|
| string|
| string|
| string|
| string|
| string|
+---------+
希望你在这困难时期做得很好 在将两个数据帧转换为集合后,您可以尝试对它们进行减法。 这样,您可以将结果转换为数据帧
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
此外,由于我们使用集合,如果您有多个列,那么在两个数据帧中顺序并不重要
希望这有帮助
lst = []
for row in set(df1.collect()) - set(df2.collect()):
lst.append(row)
spark.createDataFrame(lst)