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

Spark Scala:将DDMONYYYY格式日期转换为YYYY-MM-DD格式求助

解决Spark DataFrame中日期格式转换问题

要将DDMONYYYY格式的字符串日期转换为YYYY-MM-DD格式,需要分两步处理:先把字符串解析为Spark的日期类型,再格式化为目标字符串格式。你的现有代码直接使用date_format处理字符串字段会导致解析失败(返回null),因为date_format要求输入为日期/时间戳类型。

修正后的代码示例

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

val df = spark.sqlContext.createDataFrame(Seq(
      ("steak", "1990-01-01", "30Mar2022", 150),
      ("steak", "2000-01-02", "13Jan2021", 180),
      ("fish",  "1990-01-01", "01Feb2001", 100)
    )).toDF("name", "startDate", "endDate", "price")

// 一步完成解析+格式化
val dfResult = df.withColumn("formattedEndDate", 
    date_format(to_date(col("endDate"), "ddMMMyyyy"), "yyyy-MM-dd")
)

dfResult.show()

代码说明

  • to_date(col("endDate"), "ddMMMyyyy"):将DDMONYYYY格式的字符串解析为Spark日期类型。这里的格式符注意大小写:
    • dd:两位数字的日期(如30、13)
    • MMM:月份的英文缩写(如Mar、Jan)
    • yyyy:四位数字的年份
  • date_format(..., "yyyy-MM-dd"):将解析后的日期类型转换为YYYY-MM-DD格式的字符串。

输出结果

+-----+----------+----------+-----+---------------+
| name| startDate|    endDate|price|formattedEndDate|
+-----+----------+----------+-----+---------------+
|steak|1990-01-01|30Mar2022 |  150|     2022-03-30|
|steak|2000-01-02|13Jan2021 |  180|     2021-01-13|
| fish|1990-01-01|01Feb2001 |  100|     2001-02-01|
+-----+----------+----------+-----+---------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:22:38