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

问题描述 投票:0回答:1

我必须比较两个数据帧,以最有效的方法使用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|
+------+---------+--------+----------+
python-3.x apache-spark pyspark comparison spark-dataframe
1个回答
1
投票

subract函数是您正在寻找的函数,它将检查每一行的所有列值,并为您提供与其他数据帧不同的数据框。

df2.subtract(df1).select("emp_id","emp_city","emp_name","emp_phone")

正如api文件所说

返回一个新的:class:DataFrame包含此帧中的行但不包含在另一帧中。 这相当于SQL中的EXCEPT

© www.soinside.com 2019 - 2024. All rights reserved.