比较来自两个不同 pyspark 数据框的两对列以显示不同的数据

Compare two couple of columns from two different pyspark dataframe to display the data that are different

我有这个包含四列的数据框

df1 = spark.createDataFrame([
    ('c', 'd', 3.0, 4),
    ('c', 'd', 7.3, 8),
    ('c', 'd', 7.3, 2),
    ('c', 'd', 7.3, 8),
    ('e', 'f', 6.0, 3),
    ('e', 'f', 6.0, 8),
    ('e', 'f', 6.0, 3),
    ('c', 'j', 4.2, 3),
    ('c', 'j', 4.3, 9),
], ['a', 'b', 'c', 'd'])

df1.show()
+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+
|  c|  d|3.0|  4|
|  c|  d|7.3|  8|
|  c|  d|7.3|  2|
|  c|  d|7.3|  8|
|  e|  f|6.0|  3|
|  e|  f|6.0|  8|
|  e|  f|6.0|  3|
|  c|  j|4.2|  3|
|  c|  j|4.3|  9|
+---+---+---+---+

而且我还得到了与数据帧 df1 具有相同模式的另一个数据帧 df2


df2 = spark.createDataFrame([
    ('c', 'd', 3.0, 4),
    ('c', 'd', 3.3, 5),
    ('c', 'd', 7.3, 2),
    ('c', 'd', 7.3, 7),
    ('e', 'f', 6.0, 3),
    ('c', 'j', 4.2, 1),
    ('c', 'j', 4.3, 9),
], ['a', 'b', 'c', 'd'])
df2.show()
+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+
|  c|  d|3.0|  4|
|  c|  d|3.3|  5|
|  c|  d|7.3|  2|
|  c|  d|7.3|  7|
|  e|  f|6.0|  3|
|  c|  j|4.2|  1|
|  c|  j|4.3|  9|
+---+---+---+---+

我想比较这对 (a, b, d) 以便我可以获得 df2 中存在但 df1 中不存在的不同值,如下所示

df3
+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+
|  c|  d|3.3|  5|
|  c|  d|7.3|  7|
|  c|  j|4.2|  1|
+---+---+---+---+

我想你想要的是:

df2.subtract(df1.intersect(df2)).show()

我想要 df2 中有但 df1 和 df2 中没有的东西。

+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+
|  c|  j|4.2|  1|
|  c|  d|3.3|  5|
|  c|  d|7.3|  7|
+---+---+---+---+

我也同意@pltc 的观点,指出您可能在输出中犯了错误 table。