如何过滤一个数据框,以确保在Pyspark两列的值不同?



我试图比较具有相同列的两个表,然后返回冲突的列。例如:表一:

<表类> emp_id emp_name tbody><<tr>1约翰2玛丽
combined_df = pd.concat([df, df2])
print(combined_df[combined_df.duplicated()])

输出:

emp_id emp_name
0       1     John

或者,因为我不太确定你在问什么;

print(combined_df[~combined_df.duplicated()])
...
emp_id emp_name
0       1     John
1       2     Mary
1       2    Karen
2       3    Steve
print(combined_df[~combined_df.duplicated(keep=False)])
...
emp_id emp_name
1       2     Mary
1       2    Karen
2       3    Steve

您可以像前面那样使用emp id连接表。然后使用where else子句检查是否存在冲突。假设加入后的colname为:emp_id,emp_name_1和emp_name_2

final_df= df.withColumn("conflict_names", when(col("emp_name_1")!=col("emp_name_2"), col("emp_name_2")).otherwise(lit(None).cast(StringType())))

您的最后一个过滤条件不正确df = df.filter((df.emp_name1 = df.emp_name2))。应该是

df = df.filter((df.name1 != df.name2))
+---+-----+-----+
| id|name1|name2|
+---+-----+-----+
|  2| Mary|Karen|
+---+-----+-----+

最新更新