从特定值添加 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 |
+---+----------+
我正在努力解决 (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 |
+---+----------+