PySpark中的数据帧求和

时间:2019-11-24 03:28:51

标签: pyspark pyspark-sql pyspark-dataframes

我的数据框看起来像-

id       product          amount
1         a                 100
2         b                 300
3         c                 400
4         d                 100

我的最终数据框应为-

id       product          amount       total
1         a                 100         900
2         b                 300         900
3         c                 400         900
4         d                 100         900

如何在Pyspark中做到这一点。

2 个答案:

答案 0 :(得分:0)

我认为这应该可行,但不是最佳方法:

df = df.crossJoin(df.select(F.sum("amount").alias("total")))

我能想到的另一种方法是:

df.withColumn('total1', F.lit(df.select(F.sum("A").alias("total")).collect()[0][0]))

IMO,这两种解决方案都相当昂贵。

答案 1 :(得分:0)

您可以使用如下窗口操作:

 from pyspark.sql.functions import sum
 from pyspark.sql.window import *
 spec = Window.partitionBy()
 newdf = df.withColumn('total',sum('amount').over(spec))

注意:由于没有为窗口操作定义分区!将所有数据移至单个分区,这可能会导致严重的性能下降。