Scala Spark基于dataframe中的另一列递增一列,不带for循环

Scala Spark基于dataframe中的另一列递增一列,不带for循环,scala,apache-spark,Scala,Apache Spark,我有一个像下面这样的数据帧。我需要一个名为cutofftype的新列,它不是当前单调递增的数字,而是在ID列每次更改时重置为1 df=df.orderBy(“ID”,“date”)。带列(“截止类型”,单调递增的\u ID()+1) 目标如下: +------+---------------+----------+ | ID | date |cutofftype| +------+---------------+----------+ | 54441| 2016-0

我有一个像下面这样的数据帧。我需要一个名为cutofftype的新列,它不是当前单调递增的数字,而是在ID列每次更改时重置为1

df=df.orderBy(“ID”,“date”)。带列(“截止类型”,单调递增的\u ID()+1)

目标如下:

+------+---------------+----------+
|   ID |    date       |cutofftype|
+------+---------------+----------+
| 54441|     2016-06-20|         1|
| 54441|     2016-06-27|         2|
| 54441|     2016-07-04|         3|
| 54441|     2016-07-11|         4|
| 54500|     2016-05-02|         1|
| 54500|     2016-05-09|         2|
| 54500|     2016-05-16|         3|
| 54500|     2016-05-23|         4|
| 54500|     2016-06-06|         5|
| 54500|     2016-06-13|         6|
+------+---------------+----------+

我知道这可以通过for循环来实现-我想在没有for循环的情况下实现>>有办法吗?

简单的按问题划分。您应该使用
窗口

import org.apache.spark.sql.expressions.Window
val w = Window.partitionBy("ID").orderBy("date")

df.withColumn("cutofftype", row_number().over(w)).show()


+-----+----------+----------+
|   ID|      date|cutofftype|
+-----+----------+----------+
|54500|2016-05-02|         1|
|54500|2016-05-09|         2|
|54500|2016-05-16|         3|
|54500|2016-05-23|         4|
|54500|2016-06-06|         5|
|54500|2016-06-13|         6|
|54441|2016-06-20|         1|
|54441|2016-06-27|         2|
|54441|2016-07-04|         3|
|54441|2016-07-11|         4|
+-----+----------+----------+
import org.apache.spark.sql.expressions.Window
val w = Window.partitionBy("ID").orderBy("date")

df.withColumn("cutofftype", row_number().over(w)).show()


+-----+----------+----------+
|   ID|      date|cutofftype|
+-----+----------+----------+
|54500|2016-05-02|         1|
|54500|2016-05-09|         2|
|54500|2016-05-16|         3|
|54500|2016-05-23|         4|
|54500|2016-06-06|         5|
|54500|2016-06-13|         6|
|54441|2016-06-20|         1|
|54441|2016-06-27|         2|
|54441|2016-07-04|         3|
|54441|2016-07-11|         4|
+-----+----------+----------+