使用PySpark从Date列中获取最连续的一天



原始数据帧:

tbody> <<tr>
member_id AccessDate
1111112020-02-03
1111112022-03-05
2222222015-03-04
3333332021-11-23
3333332021-11-24
3333332021-11-25
3333332022-10-11
3333332022-10-12
3333332022-10-13
3333332022-07-07
4444442019-01-21
4444442019-04-21
4444442019-04-22
4444442019-04-23
4444442019-04-24
4444442019-05-05
4444442019-05-06
4444442019-05-07

可以这样做:(使用"gap & & islands"-很快会添加细节)

df.select(F.col("member_id"), F.col("AccessDate").cast("Date"))
.withColumn("row_num", F.row_number().over(Window().orderBy(F.lit('A'))))
.withColumn("bucket", F.col("AccessDate")-F.col("row_num"))
.groupBy("bucket", "member_id")
.agg(F.max("AccessDate").alias("AccessDate"), F.count("*").alias("cnt"))
.orderBy(F.col("cnt").desc(), F.col("AccessDate").desc())
.groupBy("member_id")
.agg(F.first("cnt"), F.first("AccessDate"))
.show();

了解更多关于系列问题的知识- https://blog.jooq.org/how-to-find-the-longest-consecutive-series-of-events-in-sql/

最新更新