【问题标题】:How to compare two massive spark dataframes on row level and print the difference如何在行级别上比较两个海量 Spark 数据帧并打印差异
【发布时间】:2019-03-21 03:58:31
【问题描述】:
我有两个非常大的 spark 数据框。我想在行级别上比较它并只打印差异
例如:
df1= firstname:abc lastname:xyz company:123
df2= firstname:abc lastname:xyz company:456
预期输出-diff= company(df1):123 company(df2):456
【问题讨论】:
标签:
python
pandas
apache-spark
pyspark
【解决方案1】:
就我而言,您所描述的问题没有最佳解决方案。因为,只有当您有一个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|
+-----+-----+-----+
【解决方案2】:
我想你在找except
df1.except(df2)
将返回 df1 中的行而不是 df2 中的行。