python—在pyspark中,从一个Dataframe中删除与第二个Dataframe中的行相匹配的行

fdbelqdn  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(311)

再说一次,在aws和Pypark上,不知怎么的,似乎做不好。我的第一个Dataframe是先前数据转换的结果,看起来像df1:

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

我的第二个Dataframe是原始数据,看起来像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和求和值对查询分组。我一直在挣扎,现在几乎要放弃了。有什么想法吗?谢谢。

7kjnsjlb

7kjnsjlb1#

正如你所说的,你可以加入进来 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|
+---+----------+

相关问题