Pyspark-通过 ID 分配组中的每个组

Aur*_*son 2 python pandas apache-spark pyspark

我想使用 pyspark 为组中的每个组分配一个从 0 或 1 开始的唯一 ID 号,并为每个组递增 1。

我之前已经使用 pandas 和 python 完成了此操作,命令如下:

df['id_num'] = (df
                .groupby('column_name')
                .grouper
                .group_info[0])
Run Code Online (Sandbox Code Playgroud)

输入和所需输出的玩具示例是:

输入

+------+
|object|
+------+
|apple |
|orange|
|pear  |
|berry |
|apple |
|pear  |
|berry |
+------+
Run Code Online (Sandbox Code Playgroud)

输出:

+------+--+
|object|id|
+------+--+
|apple |1 |
|orange|2 |
|pear  |3 |
|berry |4 |
|apple |1 |
|pear  |3 |
|berry |4 |
+------+--+
Run Code Online (Sandbox Code Playgroud)

Ali*_*lli 5

我不确定顺序是否重要。如果没有,您可以在这种情况下使用dense_rank 窗口函数

>>> from pyspark.sql.window import Window
>>> import pyspark.sql.functions as F
>>> 
>>> df.show()
+------+
|object|
+------+
| apple|
|orange|
|  pear|
| berry|
| apple|
|  pear|
| berry|
+------+
>>> 
>>> df.withColumn("id", F.dense_rank().over(Window.orderBy(df.object))).show()
+------+---+
|object| id|
+------+---+
| apple|  1|
| apple|  1|
| berry|  2|
| berry|  2|
|orange|  3|
|  pear|  4|
|  pear|  4|
+------+---+
Run Code Online (Sandbox Code Playgroud)