Python 如何在pyspark中获取顺序id

Python 如何在pyspark中获取顺序id,python,python-3.x,apache-spark,pyspark,Python,Python 3.x,Apache Spark,Pyspark,我有一个pyspark数据帧,ID重复且不连续。我想添加一列顺序id,即下面的第二列 id | seq 1 |1 3 |2 7 |3 3 |2 3 |2 我发现实现这一目标的唯一方法是 window = Window.orderBy(col('id')) df1 = df.select('id').distinct().withColumn('seq', F.row_number().over(window)) df.join(df1, on='id') 但这似乎不是最好的办法。有

我有一个pyspark数据帧,ID重复且不连续。我想添加一列顺序id,即下面的第二列

id | seq
1  |1
3  |2
7  |3
3  |2
3  |2
我发现实现这一目标的唯一方法是

window = Window.orderBy(col('id'))
df1 = df.select('id').distinct().withColumn('seq', F.row_number().over(window))
df.join(df1, on='id')

但这似乎不是最好的办法。有没有其他更快捷的方法来完成此任务?

使用
densite\u-rank
窗口功能

示例:

from pyspark.sql.window import *
from pyspark.sql.functions import *
w=Window.orderBy('id')

df.show()
#+---+
#| id|
#+---+
#|  1|
#|  3|
#|  3|
#|  3|
#|  7|
#+---+
df.withColumn("seq",dense_rank().over(w)).show()
#+---+---+
#| id|seq|
#+---+---+
#|  1|  1|
#|  3|  2|
#|  3|  2|
#|  3|  2|
#|  7|  3|
#+---+---+