PySpark中基于Unique Idn的新访问生成visit seq字段方法
PySpark生成访问序列(visit seq)解决方案
需求说明
按Unique Idn分组,每组内按visit time排序,每当new visit字段值为1时,visit seq计数器递增,后续行沿用当前计数器值直到下一个1出现。
实现代码
假设你的DataFrame名为df,执行以下代码即可生成目标字段:
from pyspark.sql import Window import pyspark.sql.functions as F # 定义窗口规则:按Unique Idn分区,按visit time升序,范围覆盖组内从首行到当前行 window_spec = Window.partitionBy("Unique Idn").orderBy("visit time").rowsBetween(Window.unboundedPreceding, Window.currentRow) # 累计求和new visit得到visit seq df_with_seq = df.withColumn("visit seq", F.sum("new visit").over(window_spec)) # 查看结果 df_with_seq.show()
逻辑解释
- 窗口函数会在每个
Unique Idn分组内,从最早的访问时间开始,对new visit做累计求和。 - 每次遇到
new visit=1时,累计值自动加1,后续无新访问标记的行会保持当前累计值,完全匹配你需要的访问编号生成逻辑。
以你提到的Unique Idn=11为例:
当
new visit=1触发后,visit seq变为2,后续6:24到6:26的所有行都会沿用这个编号,直到下一个new visit=1出现才会再次递增。
内容的提问来源于stack exchange,提问作者user1403789
相关产品推荐
相关产品推荐

