创建一个临时列(
grp),每当列
C等于
0(重置条件)时递增计数器,并将其用作累积总和的分区列。
import pyspark.sql.functions as ffrom pyspark.sql import Windowx.withColumn( "grp", f.sum((f.col("C") == 0).cast("int")).over(Window.orderBy("A"))).withColumn( "D", f.sum(f.col("C")).over(Window.partitionBy("grp").orderBy("A"))).drop("grp").show()#+---+----+---+---+#| A| B| C| D|#+---+----+---+---+#| 0|null| 1| 1|#| 1| 3.0| 0| 0|#| 2| 7.0| 0| 0|#| 3|null| 1| 1|#| 4| 4.0| 0| 0|#| 5| 3.0| 0| 0|#| 6|null| 1| 1|#| 7|null| 1| 2|#| 8|null| 1| 3|#| 9| 5.0| 0| 0|#| 10| 2.0| 0| 0|#| 11|null| 1| 1|#+---+----+---+---+


