rank, dense_rank, row_number 都是把表中的行按分区内的排序标上序号,
但有一点差别:
rank:可以生成不连续的序号,比如按分数排序,第一第二都是100分,第三名98分,那第一第二就会显示序号1,第三名显示序号3(排名重复占位)
dense_rank: 第一第二并列显示序号1,第三名会显示序号2(排名重复不占位)。
row_number: 第一第二第三将会显示序号为1,2,3(排名不重复占位)
用法:
from pyspark.sql.window import Window
window = Window.partitionBy('group').orderBy(df.count.desc())
df = df.withColumn('topn', F.rank().over(window))
#group是分组字段
#count是排序字段
#topn是新增字段,用来存储排序序号