如何在行级别比较两个大型Spark数据帧并打印差异

时间:2019-03-21 03:58:32

标签: python pandas apache-spark pyspark

我有两个非常大的spark数据帧。我想在行级别进行比较,仅打印差异

例如:

df1= firstname:abc lastname:xyz company:123


df2= firstname:abc lastname:xyz company:456


预期的输出-diff= company(df1):123 company(df2):456

2 个答案:

答案 0 :(得分:0)

就我而言,您所描述的问题还没有最佳解决方案。因为,只有在两个数据帧都可以连接到的column/reference上,才能发现数据帧之间的差异。

要注意的是,一种方法是使用subtract函数查找在某种程度上有帮助的差异。

>>> df_1.show()
+-----+-----+-----+
|fname|lname|cmpny|
+-----+-----+-----+
|  abc|  xyz|  123|
+-----+-----+-----+

>>> df_2.show()
+-----+-----+-----+
|fname|lname|cmpny|
+-----+-----+-----+
|  abc|  xyz|  456|
+-----+-----+-----+

>>> df_1.select('*').subtract(df_2.select('*')).show()
+-----+-----+-----+
|fname|lname|cmpny|
+-----+-----+-----+
|  abc|  xyz|  123|
+-----+-----+-----+

>>> df_2.select('*').subtract(df_1.select('*')).show()
+-----+-----+-----+
|fname|lname|cmpny|
+-----+-----+-----+
|  abc|  xyz|  456|
+-----+-----+-----+

答案 1 :(得分:0)

我认为您正在寻找except

df1.except(df2)

将返回df1中的行,而不返回df2中的行。