首页 > 解决方案 > pyspark 行总和以根据 groupby 中另一列中的值获取一个新行

问题描述

有一个包含用户、位置、值的数据框。目前,美国相关位置在一个用户的不同行中:

user     location   values
209       OH_US          45
O09       PA_US          30
O09       AQ             10
209       CA_US          50
209       UK             10 
....          

对于每个想要生成一个新行来用总和替换美国相关位置的用户,位置名称是“US”。删除美国不同州的这些行。预期结果如下所示:

user     location   values
209       US          200
209       UK          10
O09       US          300
O09       AQ          10
...

目前我正在考虑将所有与美国相关的行拉到一个单独的数据框中以在 groupby 中进行求和,然后在原始数据框中删除与美国相关的所有行以加入美国求和数据框。

有没有更有效的方法来做到这一点?

标签: pythonjoin

解决方案


嗨,我们可以用多种方法在 pyspark 中解决这个问题吗

  1. 使用 spark.sql -
df.createOrReplaceTempView("SAMPLE_TABLE")

df.createOrReplaceTempView("SAMPLE_TABLE")

df2=spark.sql("SELECT user , case when location like '%_US' then 'US' else location end Location , SUM(VALUES) VALUES  from SAMPLE_TABLE group by user , case when location like '%_US' then 'US' else location end ")

df2.show()
  1. 使用 pyspark api

    import pyspark.sql.functions as F
    
    df.groupby(F.when(F.col('location').\
    like("%_US"),"US").\
    otherwise(F.col("location")).\
    alias('location'))\
    .agg(F.sum('values').alias("values"))\
    .show()
    

推荐阅读