Scala Spark Dataframe 创建一个新列,其中包含另一列的前一值和当前值的最大值

Imr*_*n K 0 scala apache-spark apache-spark-sql

我有一个只有列category和 A列的数据框,如下所示。我想填充 B 列,以便它比较 A 的当前值和 B 的先前值并存储每个类别的最大值。尝试使用 Windows 函数、滞后、类别最大值等,但我面临的最大挑战是如何在比较两个值时记住较早的最大值。

 +---+--------+--+--+
 id |  category | A | B |
 +---+--------+--+--+
  1  Fruit   1   1
  2  Fruit   5   5
  3  Fruit   3   5 
  4  Fruit   4   5 
  1  Dessert 4   4
  2  Dessert 2   4
  1  Veggies 11  11
  2  Veggies 7   11
  3  Veggies 12  12
  4  Veggies 3   12
  ---+------+---+----+-
Run Code Online (Sandbox Code Playgroud)

Rap*_*oth 5

使用运行最大值A应该可以解决问题:

df
 .withColumn("B", max($"A").over(Window.partitionBy($"category").orderBy($"id")))
Run Code Online (Sandbox Code Playgroud)