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

Spark SQL按applicantkey计算min/max日期替换原列结果异常问题

问题根因分析
  • 首次GROUP BY写法问题:你将mobilenumber加入了分组维度,相当于聚合粒度是applicantkey + utmcontent + mobilenumber,最小注册日期、最大登录日期只会在每个手机号对应的分组内计算,而非同一applicantkey下的全局值,因此手机号不同的场景结果不符合预期。
  • JOIN写法问题:你用按applicantkey聚合的结果关联全量原表,当原表中同一个applicantkey下存在手机号、utmcontent都相同的重复行时,关联后会保留原表的所有重复行,因此手机号相同的场景会出现重复数据。
最优实现方案

无需拆分做JOIN,直接用窗口函数就能实现需求,既可以拿到同一applicantkey下的全局最小注册日期、最大登录日期,也不会产生JOIN带来的额外重复数据:

spark.sql(
"""
select 
  applicantkey,
  min(first_reg_date) over(partition by applicantkey) as first_reg_date,
  utmcontent,
  max(latest_signin_date) over(partition by applicantkey) as latest_signin_date,
  mobilenumber
from df
"""
).show(truncate=False)

如果需要处理手机号相同场景的重复行,只需要在查询中先对applicantkey, utmcontent, mobilenumber三个字段去重,再做窗口函数计算即可,效率高于最终全量去重。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:03