You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark统计事件前90天购买量报str无over属性错误如何解决

错误原因

  • 语法层面:你在调用max聚合函数时直接传入了字符串参数'rank_test',没有将其转换为Spark的Column对象。over是Spark Column类的专属方法,字符串类型不存在该属性,因此触发AttributeError。如果仅修复语法,把max('rank_test')修改为max(col('rank_test'))即可解决该报错。
  • 逻辑层面:你的现有代码逻辑和统计「事件前90天购买总数量」的需求完全不符,即使修复语法错误也得不到预期结果,你用窗口排名取最大值的逻辑只能得到最近一次购买的标识,无法统计总条数。

正确实现方案

你不需要使用窗口排名函数,直接关联后分组统计即可,代码如下:

from pyspark.sql import functions as F

result = events.join(
    purchase,
    on = [
        events.User_id == purchase.User_id,
        purchase.Date <= events.Date,
        F.floor((events.Date.cast("long") - purchase.Date.cast("long")) / 86400) <= 90
    ],
    how = "left"
).groupBy(
    events.Id, events.User_id, events.Date
).agg(
    F.count(purchase.Id).alias("qtyPurchasePast90days")
)

实现说明

  1. 关联阶段直接过滤出符合「用户id匹配、购买日期早等于事件日期、购买日期在事件日期前90天内」的记录,减少后续计算的数据量
  2. 按事件表的Id、User_id、Date分组,统计购买记录的条数就是对应90天的购买总量;left join可以保证没有符合条件购买记录的用户统计值为0,不会丢失事件行
  3. 最终输出和你的预期结果完全一致。

内容的提问来源于stack exchange,提问作者danimille

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:09:04