我的数据框看起来像-
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中做到这一点。
答案 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))
注意:由于没有为窗口操作定义分区!将所有数据移至单个分区,这可能会导致严重的性能下降。