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

如何在Azure Databricks中使用Scala实现月份名称到月份数字的映射

在Azure Databricks中用Scala实现月份缩写转两位数字映射

下面提供两种实用的实现方式,根据你的场景选择即可:

方法一:自定义映射字典(严格匹配指定规则)

如果需要完全按照给定的映射规则实现,不受系统环境影响,可以手动构建映射关系:

import org.apache.spark.sql.functions.{col, create_map, lit}

// 构建月份缩写到两位数字的映射
val monthMapping = create_map(
  lit("Jan"), lit("01"),
  lit("Feb"), lit("02"),
  lit("Mar"), lit("03"),
  lit("Apr"), lit("04"),
  lit("May"), lit("05"),
  lit("Jun"), lit("06"),
  lit("Jul"), lit("07"),
  lit("Aug"), lit("08"),
  lit("Sep"), lit("09"),
  lit("Oct"), lit("10"),
  lit("Nov"), lit("11"),
  lit("Dec"), lit("12")
)

// 转换PERIOD列,生成新的数字月份列(示例命名为PERIOD_NUM)
val resultDF = yourOriginalDataFrame.withColumn("PERIOD_NUM", monthMapping.getItem(col("PERIOD")))

这种方式的优势是完全自定义规则,不会因为系统本地化设置出现解析偏差,适合要求严格匹配的场景。

方法二:利用Spark内置日期函数(简洁高效)

如果你的月份缩写是标准英文格式,可以直接借助Spark的日期解析函数,无需手动维护映射:

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

// 将月份缩写转为日期,再提取两位数字的月份
val resultDF = yourOriginalDataFrame.withColumn(
  "PERIOD_NUM",
  date_format(to_date(col("PERIOD"), "MMM"), "MM")
)

// 若Databricks环境默认语言非英文,需显式指定英文Locale避免解析失败
import java.util.Locale

val resultDFWithLocale = yourOriginalDataFrame.withColumn(
  "PERIOD_NUM",
  date_format(to_date(col("PERIOD"), "MMM", Locale.ENGLISH), "MM")
)

这种方式更简洁,不需要手动写全12个月份的映射,减少代码冗余,适合标准英文月份的常规场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:42:05