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

Spark:将含日期时间的Timestamp转换为DateType失败问题排查

问题分析与解决

错误点总结

  • 未替换原字段:你仅执行了转换逻辑,但没有将转换后的结果赋值回DataFrame的Date字段,原字段仍保留原始字符串类型,所以printSchema()显示类型未变,输出值也还是原格式。
  • 代码冗余:to_date函数本身返回的就是DateType,额外调用.cast(DateType)完全没必要。

正确实现方式

必须通过withColumn方法将转换结果覆盖原字段(或生成新字段),以下是两种可行写法:

写法1:直接用to_date解析字符串

import org.apache.spark.sql.functions.{col, to_date}

// 覆盖原Date字段,将字符串直接转为DateType
val dfUpdated = df.withColumn("Date", to_date(col("Date"), "yyyy-MM-dd'T'HH:mm:ss"))

写法2:先转Timestamp再转Date(可选)

如果一定要先转时间戳再转日期,也可以这么写(和写法1效果一致):

import org.apache.spark.sql.functions.{col, to_date, to_timestamp}

val dfUpdated = df.withColumn("Date", to_date(to_timestamp(col("Date"), "yyyy-MM-dd'T'HH:mm:ss")))

验证结果

执行上述代码后,调用dfUpdated.printSchema()会显示:

|-- Date: date (nullable = true)

字段值也会变为你预期的yyyy-MM-dd格式(如2021-02-12)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:12:12