![](/img/trans.png)
[英]Compare Value of Current and Previous Row, and after for Column if required in Spark
[英]Compare Value of Current and Previous Row in Spark
我正在嘗試比較下面DataFrame
中當前行和上一行的DataFrame
。 我要計算“金額”列。
scala> val dataset = sc.parallelize(Seq((1, 123, 50), (2, 456, 30), (3, 456, 70), (4, 789, 80))).toDF("SL_NO","ID","AMOUNT")
scala> dataset.show
+-----+---+------+
|SL_NO| ID|AMOUNT|
+-----+---+------+
| 1|123| 50|
| 2|456| 30|
| 3|456| 70|
| 4|789| 80|
+-----+---+------+
計算邏輯:
其他行也需要遵循相同的邏輯。
預期產量:
+-----+---+------+
|SL_NO| ID|AMOUNT|
+-----+---+------+
| 1|123| 50|
| 2|456| 30|
| 3|456| 30|
| 4|789| 80|
+-----+---+------+
請幫忙。
您可以在when.otherwise
使用lag
,這是一個演示:
import org.apache.spark.sql.expressions.Window
val w = Window.orderBy($"SL_NO")
dataset.withColumn("AMOUNT",
when($"ID" === lag($"ID", 1).over(w), lag($"AMOUNT", 1).over(w)).otherwise($"AMOUNT")
).show
+-----+---+------+
|SL_NO| ID|AMOUNT|
+-----+---+------+
| 1|123| 50|
| 2|456| 30|
| 3|456| 30|
| 4|789| 80|
+-----+---+------+
注意:由於此示例不使用任何分區,因此在實際數據中可能會出現性能問題,如果可以通過某些變量對問題進行分區Window.orderBy($"SL_NO").partitionBy($"ID")
具體取決於您的實際問題以及ID是否一起排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.