pyspark数据帧比较以根据关键字段查找列差异

2024-02-20

我必须使用 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(使用前将#替换为@)

pyspark数据帧比较以根据关键字段查找列差异 的相关文章

随机推荐