Pyspark:基于一个列值从另一个数据帧中减去一个数据帧

时间:2020-08-22 05:10:20

标签: pyspark

我有两个pyspark数据帧- 数据框A

+----+---+
|name| id|
+----+---+
|   a|  3|
|   b|  5|
|   c|  7|
+----+---+

数据框B

+----+---+
|name| id|
+----+---+
|   a|  3|
|   b| 10|
|   c| 13|
+----+---+

我想基于列ID从数据帧A中减去数据帧B。因此结果数据框应为-

+----+---+
|name| id|
+----+---+
|   b|  5|
|   c|  7|
+----+---+

这是我的代码,

common = A.join(B, ['id'], 'leftsemi')
diff = A.subtract(common)
diff.show()

但是它没有给出预期的结果。有没有一种简单的方法可以实现这一点,它可以根据一个列的值从另一个数据帧减去数据帧。找不到。预先感谢

2 个答案:

答案 0 :(得分:3)

A.subtract(B).orderBy("id").show()

+----+---+
|name| id|
+----+---+
|   b|  5|
|   c|  7|
+----+---+

答案 1 :(得分:2)

如果只想比较id列,则使用left_anti连接。通过比较df1列,这将为您提供df2中而不是id中的结果。

df1.join(df2, ['id'], 'left_anti').show(10, False)

+---+----+
|id |name|
+---+----+
|5  |b   |
|7  |c   |
+---+----+

subtract就是全部。

df1.subtract(df2).show(10, False)

+----+---+
|name|id |
+----+---+
|b   |5  |
|c   |7  |
+----+---+