Python 如何在pyspark中获取顺序id
我有一个pyspark数据帧,ID重复且不连续。我想添加一列顺序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') 但这似乎不是最好的办法。有
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|
#+---+---+