[英]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.