【问题标题】:Pyspark : Subtract one dataframe from another based on one column valuePyspark:根据一列值从另一个数据帧中减去一个数据帧
【发布时间】:2020-08-22 05:10:20
【问题描述】:

我有两个 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()

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

【问题讨论】:

标签: pyspark


【解决方案1】:
A.subtract(B).orderBy("id").show()

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

【讨论】:

    【解决方案2】:

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

    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  |
    +----+---+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      相关资源
      最近更新 更多