比较两个数据帧并显示不同的数据

compare two dataframes and display the data that are different

我有两个数据框,我想比较两列的值并显示不同的值,例如:比较这个 Table 1

A B C D
O1 2 E1 2
O1 3 E1 1
O1 2 E1 0
O1 5 E2 2
O1 2 E2 3
O1 2 E2 2
O1 5 E2 1
O2 8 E1 2
O2 8 E1 0
O2 0 E1 1
O2 2 E1 4
O2 9 E1 2
O2 2 E2 1
O2 9 E2 4
O2 2 E2 2

用这个 table 2

A B C D
O1 2 E1 2
O1 2 E2 3
O2 2 E1 4
O2 9 E2 4

我试过了

cond= [table1.A ==  table2.A, table1.C ==  table2.C, table1.D ==  table2.D]
join = table1.join(table2,cond,"leftsemi")

因为里面有很多数据,我不知道如何检查我得到的结果是否正确

从一个数据帧创建一个元组列表

check_list = list(df2.apply(tuple, axis=1))

并用它来与其他人进行比较

df1 =df1[~df1.apply(tuple, axis=1).isin(check_list)]

由于您的数据框具有相同的架构,您可以使用 subtract

df1
df1 = spark.createDataFrame([
    (1, 2, 3, 4),
    (5, 6, 7, 8),
], ['a', 'b', 'c', 'd'])

+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+
|  1|  2|  3|  4|
|  5|  6|  7|  8|
+---+---+---+---+
df2
df2 = spark.createDataFrame([
    (5, 6, 7, 8),
], ['a', 'b', 'c', 'd'])

+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+
|  5|  6|  7|  8|
+---+---+---+---+
subtract 获取 df1 中存在但 df2
中不存在的数据
df1.subtract(df2).show()

+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+
|  1|  2|  3|  4|
+---+---+---+---+