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

PySpark中MMM-YY格式字符串转指定日期格式的方法

在PySpark DataFrame中转换"MMM-YY"为当月1日字符串

针对将"MMM-YY"格式的字符串转换为"01-MMM-YY"格式的需求,这里提供两种高效实现方案,适配不同场景:

方法一:日期解析+格式化(推荐,含有效性校验)

该方案先将输入字符串解析为日期类型(自动处理无效输入,返回null),再格式化为目标字符串,适合需要校验数据合法性的场景。

from pyspark.sql import SparkSession
from pyspark.sql.functions import to_date, date_format, upper

# 初始化Spark会话
spark = SparkSession.builder.appName("MonthToFirstDay").getOrCreate()

# 构造测试数据
test_data = [("jun-22",), ("Jan-22",), ("Feb-21",), ("oct-23",), ("invalid-99",)]
df = spark.createDataFrame(test_data, ["month_str"])

# 执行转换
result_df = df.withColumn(
    "first_day",
    date_format(to_date(upper("month_str"), "MMM-yy"), "dd-MMM-yy")
)

# 查看结果
result_df.show(truncate=False)

输出结果:

+----------+-----------+
|month_str |first_day  |
+----------+-----------+
|jun-22    |01-JUN-22  |
|Jan-22    |01-JAN-22  |
|Feb-21    |01-FEB-21  |
|oct-23    |01-OCT-23  |
|invalid-99|null       |
+----------+-----------+

逻辑说明:

  1. upper("month_str"):统一将月份缩写转为大写,避免因大小写差异导致日期解析失败;
  2. to_date(..., "MMM-yy"):将字符串解析为日期类型,Spark会自动将无日份的年月字符串映射为当月1日;
  3. date_format(..., "dd-MMM-yy"):将日期格式化为目标字符串格式。

方法二:字符串直接拼接(极致高效,无校验)

如果可以确保所有输入都是合法的"MMM-YY"格式,直接拼接前缀并统一大小写即可,避免日期解析的性能开销。

from pyspark.sql import SparkSession
from pyspark.sql.functions import concat, lit, upper

spark = SparkSession.builder.appName("MonthToFirstDay").getOrCreate()

test_data = [("jun-22",), ("Jan-22",), ("Feb-21",)]
df = spark.createDataFrame(test_data, ["month_str"])

result_df = df.withColumn(
    "first_day",
    concat(lit("01-"), upper("month_str"))
)

result_df.show(truncate=False)

输出结果:

+----------+-----------+
|month_str |first_day  |
+----------+-----------+
|jun-22    |01-JUN-22  |
|Jan-22    |01-JAN-22  |
|Feb-21    |01-FEB-21  |
+----------+-----------+

适用场景:

输入数据完全可信,无需校验格式合法性,追求最高执行效率时选用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:01:14