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

Spark-SQL如何正确解析'MM/dd/yyyy HH:mm:ss.SSS'格式的毫秒值

Spark SQL 毫秒丢失问题修复方案

问题根因

  • unix_timestamp() 函数仅返回秒级时间戳,解析时间字符串时会直接截断毫秒部分,源数据中的毫秒值在解析阶段就已经丢失,后续格式化无法还原。
  • 原格式化字符串存在语法错误:yyyy-MM-dd HH:mm:ss.sss 中小写s对应秒单位,连续3个小写s会重复输出秒值而非毫秒,毫秒的正确占位符为大写S。

修复代码

将原unix_timestamp + from_unixtime的组合替换为支持毫秒级处理的to_timestamp + date_format组合即可,修正后代码如下:

spark.sql("""
select case 
    when trim(map('OPT OUT',1,'OPT IN',0,'',0)[coalesce(upper(program_1),'')]) == trim(num_fg) 
    then trim(date_format(to_timestamp(upd_dt,'MM/dd/yyyy HH:mm:ss.SSS'), 'yyyy-MM-dd HH:mm:ss.SSS')) 
    else Now() end as upd_dt 
from input
""").show(false)

验证效果

使用提供的样例数据运行修正后代码,返回结果为2020-07-21 09:09:09.382,完整保留了输入的毫秒值,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:24:05