pandas
df = df.sort_values(by=['paper_id', 'user_id', 'use_id']).drop_duplicates(
subset=['paper_id', 'user_id'], keep='first')
pandas 这样可以排序后取第一个
pyspark
orderBy( [ 'user_id', 'paper_id', 'use_id'], ascending=[ 0, 0, 0]).drop_duplicates( [ 'paper_id', 'user_id'])
仔细比较之后发现并没有取第一个
solution
window = Window.partitionBy([ 'paper_id', 'user_id']).orderBy(['user_id', 'paper_id', 'use_id'])
df.withColumn('rank', F.rank().over(window)).filter("rank= '1'").drop('rank')
注意
F.rank():计算排序时,如果存在相同位次的记录,则会跳过之后的位次。
F.dense_rank函数:同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。
F.row_number函数:赋予唯一的连续位次。