【问题标题】:How to get sequential ids in pyspark如何在pyspark中获取顺序ID
【发布时间】:2020-06-08 17:44:59
【问题描述】:

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

但这似乎不是最好的方法。是否有另一种更快的方法来完成此操作?

【问题讨论】:

    标签: python python-3.x apache-spark pyspark


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多