pyspark 分组取前几个(已解决)

pyspark 分组取前几个(已解决)_第1张图片
pyspark 怎样根据user_id和item_id分组,然后去到时间最新的前两个数据?????

方法一


sql = "select item_id, user_id, create_time from (select item_id, user_id, create_time, row_number()\
over (partition by user_id,item_id order by create_time desc ) rank from t_mock_use) g where g.rank <= 5"
spark.sql(sql).orderBy(['user_id', 'item_id', 'create_time'], ascending=[1, 1, 0]).show()

pyspark 分组取前几个(已解决)_第2张图片

方法二

 df = self.spark.sql(table)
        # df.withColumn("row_number", F.row_number().over(Window.partitionBy("user_id",'item_id','subject_1').orderBy(df["create_time"].desc()))).show()
        window=Window.partitionBy("user_id",'item_id','subject_1').orderBy(df["create_time"].desc())
        df=df.withColumn('topn',F.row_number().over(window))
        df=df.where(df.topn<=3)
        df.show()

pyspark 分组取前几个(已解决)_第3张图片

你可能感兴趣的:(pyspark)