我有两个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()
但是它没有给出预期的结果。有没有一种简单的方法可以实现这一点,它可以根据一个列的值从另一个数据帧减去数据帧。找不到。预先感谢
答案 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 |
+----+---+