pandas 如何在Pyspark上对GroupBy进行排名

ddrv8njm  于 2022-12-09  发布在  Spark
关注(0)|答案(1)|浏览(228)

我想在Pyspark上对GroupBy进行排名,我可以在panda上进行,但我需要在PySpark上进行
这是我的意见

id      year  month date  hour  minute
54807   2021     12   31     6      29
54807   2021     12   31     6      31
54807   2021     12   31     7      15
54807   2021     12   31     7      30

这是Pandas代码

df["rank"] = df.groupby(["id", "hour"])["minute"].rank()

这是我的输出

id      year  month date  hour  minute  rank
54807   2021     12   31     6      29  1.0
54807   2021     12   31     6      31  2.0
54807   2021     12   31     7      15  1.0
54807   2021     12   31     7      30  2.0
0tdrvxhp

0tdrvxhp1#

您可以使用排序窗口函数-rankdense_rankrow_number
下面是一个使用rank窗口函数示例。

import pyspark.sql.functions as func
from pyspark.sql.window import Window as wd

data_sdf. \
    withColumn('minute_rank', 
               func.rank().over(wd.partitionBy('id', 'year', 'month', 'date', 'hour').orderBy('minute'))
               ). \
    show()

# +-----+----+-----+----+----+------+-----------+
# |   id|year|month|date|hour|minute|minute_rank|
# +-----+----+-----+----+----+------+-----------+
# |54807|2021|   12|  31|   7|    15|          1|
# |54807|2021|   12|  31|   7|    30|          2|
# |54807|2021|   12|  31|   6|    29|          1|
# |54807|2021|   12|  31|   6|    31|          2|
# +-----+----+-----+----+----+------+-----------+

相关问题