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

PySpark中BigInt类型yyyyMMdd整数转MM-DD-YYYY日期方案

问题根因

转换结果全为null有两个核心原因:

  • 日期解析格式和原始数据格式不匹配:Date列是yyyyMMdd格式的整数(如20220716对应2022年7月16日),但代码里to_date传入的解析格式是MM-dd-yyyy,格式完全不匹配,无法正确解析
  • 编写的Spark SQL缺少SELECT关键字,本身存在语法错误
正确实现方案

注意逻辑顺序:必须先按照原始值的yyyyMMdd格式将整数转字符串后解析为标准日期类型,如果需要输出固定MM-dd-yyyy格式的字符串值,再对日期类型做格式化处理(标准日期类型本身不绑定展示格式)。

方案1:Spark SQL写法

from pyspark.sql.functions import *

oe_seq = sqlContext.sql(""" 
SELECT
  *,
  -- 先按原始格式解析为日期,再格式化为MM-dd-yyyy格式字符串
  date_format(to_date(cast(Date as string), 'yyyyMMdd'), 'MM-dd-yyyy') as DATE_FINAL
FROM df1
""")
oe_seq.registerTempTable("oe_seq")
display(oe_seq)

如果需要DATE_FINAL为标准日期类型而非格式化字符串,去掉外层date_format函数即可,即写为to_date(cast(Date as string), 'yyyyMMdd') as DATE_FINAL。

方案2:PySpark DataFrame API写法

无需写SQL,直接用DataFrame内置函数实现:

from pyspark.sql.functions import col, to_date, date_format

oe_seq = df1.withColumn(
  "DATE_FINAL",
  date_format(to_date(col("Date").cast("string"), "yyyyMMdd"), "MM-dd-yyyy")
)
oe_seq.registerTempTable("oe_seq")
display(oe_seq)

格式匹配规则提示:解析阶段的格式模板必须和输入值的排列完全对应,格式化阶段的模板才和最终输出的排列对应,二者不要搞混。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 19:18:40