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

PySpark to_date函数解析年第1周返回null问题咨询

现象原因

该返回结果不属于to_date函数的bug,核心是格式符使用不匹配、对Spark的周解析规则不熟悉导致的:

  • Spark的日期解析默认遵循Java SimpleDateFormat的规则,首先要区分两个易混的年份格式符:
    • yyyy:代表自然公历年,即每年1月1日到12月31日的年度计数
    • ww:代表年内周序号,默认每周以周日为起始日,每年第1周定义为「包含当年1月1日的那一周」
  • 仅传入年+周两个字段解析时,解析器会默认取对应周的起始日(周日)作为返回日期,再校验该日期的自然年是否和传入的yyyy值一致,不一致就返回null。

结合给出的测试用例可以逐一验证规则匹配逻辑:

  • 2013年第1周包含2013-01-01(周二),当周的周日是2012-12-30,属于2012自然年,和传入的yyyy=2013不匹配,返回null
  • 2013年第2周的周日是2013-01-06,属于2013自然年,匹配成功返回对应日期
  • 2017年1月1日恰好是周日,是2017年第1周的起始日,属于2017自然年,匹配成功返回2017-01-01
  • 2018年第1周包含2018-01-01(周一),当周的周日是2017-12-31,属于2017自然年,和传入的yyyy=2018不匹配,返回null
正确使用方式
  • 按年-周维度解析日期时,不要用自然年yyyy搭配周数ww,应当使用专门的周年份格式符YYYY(即按周计数的年度,跨年周归属到周内天数占比更高的自然年)。
  • 仅传年+周会默认取周起始日,很容易出现跨年匹配问题,建议搭配星期格式符明确指定周内的具体日期,比如要取每周周一作为对应日期,可以使用格式串YYYY-ww-u,其中u代表周几,取值1为周一、7为周日。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:24:21