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

使用Spark SQL的to_date函数时遭遇ParseException错误求助

解决Spark SQL日期字符串转换ParseException问题

核心问题分析

你的日期字符串2022-11-15T08:45:36.905-0800包含毫秒部分.905,且时区偏移是不带冒号的-0800,同时原SQL存在三个关键错误:

  • 格式字符串未匹配毫秒,且时区符号用错
  • 把列名create_dt用单引号包裹,导致解析的是字符串字面量而非表中列值
  • 单引号嵌套引发SQL语法错误

修正方案

1. 正确的日期格式字符串

针对你的日期格式,正确的格式应为yyyy-MM-dd'T'HH:mm:ss.SSSZ:

  • .SSS匹配毫秒部分
  • Z匹配不带冒号的时区偏移(如-0800,而ZZZZ对应带冒号的-08:00)

2. 修正后的SQL代码

解决引号嵌套问题,同时去掉列名的单引号:

df_3.createOrReplaceTempView("test")
spark.sql("select to_date(create_dt, 'yyyy-MM-dd\\'T\\'HH:mm:ss.SSSZ') as testdt2 from test").show(n=20)

或者用单引号包裹整个SQL语句,双引号包裹格式字符串:

df_3.createOrReplaceTempView("test")
spark.sql('select to_date(create_dt, "yyyy-MM-dd\'T\'HH:mm:ss.SSSZ") as testdt2 from test').show(n=20)

3. 更稳妥的替代方案(推荐)

利用to_timestamp自动兼容更多日期格式,再转为date:

df_3.createOrReplaceTempView("test")
spark.sql("select to_date(to_timestamp(create_dt)) as testdt2 from test").show(n=20)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:20:27