使用窗口函数添加,从特定值开始



我正在处理一个(Py(Spark问题。

我有一个专栏";col";在有序的数据帧中,并且需要一种将0中的元素相加的方法。我需要的是";sum_from_0";。我尝试过使用窗口功能,但没有成功。任何关于如何解决这项任务的想法都将不胜感激。提前谢谢。

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窗口(如(排序

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         |
+---+----------+

最新更新