簡體   English   中英

如何在 pyspark 中獲取順序 ID

[英]How to get sequential ids in pyspark

我有一個 pyspark dataframe 的 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')

但這似乎不是最好的方法。 有沒有另一種更快的方法來完成這個?

使用dense_rank window function。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM