从特定值添加 Window 函数

Adding with Window Functions, from specific value

我正在努力解决 (Py)Spark 问题。

我在有序数据框中有一列“col”,需要一种从 0 开始累加元素的方法。我需要的是列“sum_from_0”。 我尝试使用 window 函数但没有成功。 任何有关如何解决此任务的想法将不胜感激。 提前谢谢你。

col sum_from_0
0   None
0   None
1   1
2   3
1   4
4   8
3   11
0   None
0   None
0   None
1   1
2   3
3   6
3   9
2   11
0   None
0   None

没有排序列,所以我先做了它并添加了一些临时列来分隔总和组。之后,对 group 分区求和并按 id window 排序,例如

import org.apache.spark.sql.expressions.Window

val w1 = Window.orderBy("id")
val w2 = Window.partitionBy("group").orderBy("id")

df.withColumn("id", monotonically_increasing_id)
  .withColumn("zero", (col("col") === 0).cast("int"))
  .withColumn("group", sum("zero").over(w1))
  .withColumn("sum_from_0", sum("col").over(w2))
  .orderBy("id")
  .drop("id", "group", "zero")
  .show(20, false)

给出结果:

+---+----------+
|col|sum_from_0|
+---+----------+
|0  |0         |
|0  |0         |
|1  |1         |
|2  |3         |
|1  |4         |
|4  |8         |
|3  |11        |
|0  |0         |
|0  |0         |
|0  |0         |
|1  |1         |
|2  |3         |
|3  |6         |
|3  |9         |
|2  |11        |
|0  |0         |
|0  |0         |
+---+----------+