[英]combining lag with row computation in windowing apache spark
假設有一個數據幀如下:
a| b|
1| 3|
1| 5|
2| 6|
2| 9|
2|14|
我想生成這樣的最終數據幀
a| b| c
1| 3| 0
1| 5| -2
2| 6| -6
2| 9| -10
2| 14| -17
除了第一行之外的每一行計算c的值作為前一行的a-b + c。 我試圖使用滯后以及rowsBetween,但沒有成功因為“c”值不存在而且它被隨機變量填充!!
val w = Window.partitionBy().orderBy($"a", $"b)
df.withColumn("c", lead($"a", 1, 0).over(w) - lead($"b", 1, 0).over(w) + lead($"c", 1, 0).over(w))
不能引用c
在計算c
; 你需要的是一筆累積sum
,可能只是:
df.withColumn("c", sum(lag($"a" - $"b", 1, 0).over(w)).over(w)).show
+---+---+---+
| a| b| c|
+---+---+---+
| 1| 3| 0|
| 1| 5| -2|
| 2| 6| -6|
| 2| 9|-10|
| 2| 14|-17|
+---+---+---+
但請注意,由於缺少分區列,這樣做效率很低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.