如何在pyspark中获取顺序id

2024-06-15 01:27:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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')

但这似乎不是最好的办法。有没有其他更快的方法来实现这一点


Tags: 数据方法id目标df顺序colwindow
1条回答
网友
1楼 · 发布于 2024-06-15 01:27:20

使用dense_rank窗口函数

Example:

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|
#+ -+ -+

相关问题 更多 >