我必须比较两个数据帧,以最有效的方法使用pyspark找出基于一个或多个关键字段的列差异,因为我必须处理庞大的数据帧
我已经构建了一个使用散列匹配来比较两个数据帧的解决方案,而没有像data_compare.df_subtract(self.df_db1_hash,self.df_db2_hash)
这样的关键字段匹配,但是如果我想使用关键字段匹配,情况会有所不同
注意:我提供了样本预期数据帧。实际要求是在输出/预期数据帧中应检索任何列中与DataFrame 2的任何差异。
DataFrame 1:
+------+---------+--------+----------+-------+--------+
|emp_id| emp_city|emp_name| emp_phone|emp_sal|emp_site|
+------+---------+--------+----------+-------+--------+
| 3| Chennai| rahman|9848022330| 45000|SanRamon|
| 1|Hyderabad| ram|9848022338| 50000| SF|
| 2|Hyderabad| robin|9848022339| 40000| LA|
| 4| sanjose| romin|9848022331| 45123|SanRamon|
+------+---------+--------+----------+-------+--------+
DataFrame 2:
+------+---------+--------+----------+-------+--------+
|emp_id| emp_city|emp_name| emp_phone|emp_sal|emp_site|
+------+---------+--------+----------+-------+--------+
| 3| Chennai| rahman|9848022330| 45000|SanRamon|
| 1|Hyderabad| ram|9848022338| 50000| SF|
| 2|Hyderabad| robin|9848022339| 40000| LA|
| 4| sandiego| romino|9848022331| 45123|SanRamon|
+------+---------+--------+----------+-------+--------+
Expected dataframe after comparing dataframe 1 and 2
+------+---------+--------+----------+
|emp_id| emp_city|emp_name| emp_phone|
+------+---------+--------+----------+
| 4| sandiego| romino|9848022331|
+------+---------+--------+----------+
subract
函数是您正在寻找的函数,它将检查每一行的所有列值,并为您提供与其他数据帧不同的数据框。
df2.subtract(df1).select("emp_id","emp_city","emp_name","emp_phone")
正如api文件所说
返回一个新的:class:
DataFrame
包含此帧中的行但不包含在另一帧中。 这相当于SQL中的EXCEPT
。