【问题标题】:in PySpark, delete rows from one dataframe that match rows from a second data frame在 PySpark 中,从一个数据帧中删除与第二个数据帧中的行匹配的行
【发布时间】:2021-06-24 06:51:06
【问题描述】:

再一次,在 AWS 上使用 PySpark,不知何故似乎无法正确处理。我的第一个数据帧是先前数据转换的结果,看起来像 DF1:

| id | class |
| 2 | Bob |
| 4 | Darryl |
| 6 | Frank |

我的第二个数据帧,即原始数据,看起来像 DF2:

| id | amount |
| 1 | 5 | 
| 5 | 3 |
| 2 | 3 |
| 4 | 3 |
| 3 | 2 |
| 4 | 2 |
| 2 | 5 |
| 4 | 1 |
| 6 | 0 |

我需要对每个类中的值求和。我的结果需要看起来像 DF3:

| 2 | 8 |
| 4 | 5 |
| 6 | 0 |

我的逻辑是删除 DF2 中 DF2.id 与 DF1.id 不匹配的所有行,然后对所有类求和。在 SQL 中,我将加入 DF1 和 DF2,其中 DF1.id 与仅包含 DF1.id 和 DF2.value 的 DF2.id 匹配,然后按 id 和求和值进行 Group By 查询分组。我一直在挣扎,在这一点上几乎准备放弃。请问有什么想法吗?谢谢。

【问题讨论】:

    标签: python dataframe apache-spark pyspark apache-spark-sql


    【解决方案1】:

    正如你所说,你可以加入id,然后按id分组并总结amount

    import pyspark.sql.functions as F
    
    df3 = df2.join(df1, 'id').groupBy('id').agg(F.sum('amount').alias('sum_amount'))
    
    df3.show()
    +---+----------+
    | id|sum_amount|
    +---+----------+
    |  6|         0|
    |  4|         6|
    |  2|         8|
    +---+----------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-26
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      相关资源
      最近更新 更多