按年份进行透视,同时获取Pyspark所有金额的总和

e37o9pze  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(119)

我有这样的数据

我想要这样的输出

我该如何做到这一点?

pqwbnv8z

pqwbnv8z1#

一种做法是:透视,创建一个数组并对数组中的值求和

from pyspark.sql.functions import *

s =df.groupby('id').pivot('year').agg(sum('amount'))#Pivot
(s.withColumn('x', array(*[x for x in s.columns if x!='id']))#create array
         .withColumn('x', expr("reduce(x,cast(0 as bigint),(c,i)-> c+i)"))#sum
        ).show()

或使用pysparks内置聚合函数

s =df.groupby('id').pivot('year').agg(sum('amount'))#Pivot
(s.withColumn('x', array(*[x for x in s.columns if x!='id']))#create array
 .withColumn('x', expr("aggregate(x,cast(0 as bigint),(c,i)-> c+i)"))#sum
).show()

相关问题