我必须使用 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
包含此框架中但不包含在另一个框架中的行。
这相当于EXCEPT
in SQL.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)