【发布时间】:2019-02-26 22:26:03
【问题描述】:
我有一张桌子看起来像:
+----+------+-----+-------+
|time|val1 |val2 | class|
+----+------+-----+-------+
| 1| 3 | 2| b|
| 2| 3 | 1| b|
| 1| 2 | 4| a|
| 2| 2 | 5| a|
| 3| 1 | 5| a|
+----+------+-----+-------+
现在我想对 val1 和 val2 列进行累积求和。所以我创建了一个窗口函数:
windowval = (Window.partitionBy('class').orderBy('time')
.rangeBetween(Window.unboundedPreceding, 0))
new_df = my_df.withColumn('cum_sum1', F.sum("val1").over(windowval))
.withColumn('cum_sum2', F.sum("val2").over(windowval))
但我认为 Spark 会在原始表上应用两次窗口函数,这似乎效率较低。由于问题非常简单,有没有办法简单地应用一次窗口函数,然后在两列上一起做累积和?
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql window-functions