You need to enable JavaScript to run this app. 如何在单条Spark SQL查询中转换西班牙语格式日期(如14-ENE-2021)
优惠活动
大模型
产品
解决方案
定价
更多

如何在单条Spark SQL查询中转换西班牙语格式日期(如14-ENE-2021)

西语格式字符串转Spark日期类型问题

场景说明

  • 现有导入文件的日期字段以字符串形式存储,采用西班牙语日期表达,典型值为14-ENE-2021,其中ENE是西班牙语一月的固定缩写,整体格式结构为dd-MMM-yyyy
  • 需求为通过单条Spark SQL查询,将这类字符串转换为标准Date日期类型
  • 已尝试执行语句spark.sql("select TO_DATE('14-ENE-21', 'dd-MMM-yy')").show(),返回结果为null

为什么查询返回null

  • Spark默认使用英语语言环境做日期解析,内置的月份缩写映射表仅覆盖英语月份短写,无法识别西语月份缩写,匹配失败时会直接返回null
  • 测试语句本身存在结构偏差:测试样例用了两位年份21,和实际存量数据的四位年份结构不匹配,即便指定正确的语言环境,格式对不上也无法完成解析

单条查询实现写法

针对实际存量的四位年份西语日期,可使用带语言环境参数的TO_DATE函数完成解析:
SELECT TO_DATE('14-ENE-2021', 'dd-MMM-yyyy', 'es-ES') AS converted_date
关键逻辑说明:

  • 第三个参数es-ES指定解析过程使用西班牙语语言环境,让Spark加载西语月份的缩写映射规则,可正确识别ENE/FEB/MAR这类全大写的西语月缩写
  • 如果数据中确实存在两位年份的西语日期(如测试用的14-ENE-21),只需把格式模板替换为dd-MMM-yy即可,其他参数无需变动
  • 格式模板必须和实际数据的结构严格对齐,年份位数、分隔符不匹配都会导致解析返回null

低版本兼容提示

  • 上述带第三个参数的TO_DATE写法仅支持Spark 3.0及以上版本
  • 若使用低版本Spark,可在会话初始化时全局设置西语语言环境:spark.conf.set("spark.sql.locale", "es-ES"),设置完成后直接使用传统双参数的TO_DATE写法即可正常解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 05:27:03