簡體   English   中英

在窗口化apache spark中結合滯后和行計算

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM