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

如何使用PySpark调整日期字符串顺序并移除分隔符

PySpark将MM/YYYY格式字符串转换为YYYYMM格式

针对你的需求,这里提供两种实用的解决方案:

方案一:直接字符串拆分拼接

如果能确定所有数据都是MM/YYYY的合法格式,直接拆分斜杠分隔的两部分,交换顺序后拼接最直接:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, concat, split

# 初始化SparkSession
spark = SparkSession.builder.appName("DateTransform").getOrCreate()

# 测试数据
data = [("03/2024",), ("07/2024",), ("12/2023",)]
df = spark.createDataFrame(data, ["original_date"])

# 转换逻辑:拆分后取年份+月份,拼接成YYYYMM
df_transformed = df.withColumn(
    "formatted_date",
    concat(split(col("original_date"), "/")[1], split(col("original_date"), "/")[0])
)

df_transformed.show()

输出结果:

+-------------+--------------+
|original_date|formatted_date|
+-------------+--------------+
|      03/2024|        202403|
|      07/2024|        202407|
|      12/2023|        202312|
+-------------+--------------+

方案二:日期类型转换(带合法性校验)

如果需要同时校验日期的合法性(比如过滤13/2024这种无效数据),可以先将字符串转为日期类型,再格式化输出:

from pyspark.sql.functions import to_date, date_format

# 转换逻辑:先转日期,再格式化为YYYYMM
df_transformed = df.withColumn(
    "date_type",
    to_date(col("original_date"), "MM/yyyy")  # 转成日期类型,无效值会变成null
).withColumn(
    "formatted_date",
    date_format(col("date_type"), "yyyyMM")
)

df_transformed.show()

这种方法的优势是自动过滤非法日期,比如输入13/2024时,date_type会是null,对应的formatted_date也会是null,方便后续数据清洗。

两种方案对比

  • 字符串拼接法:速度快,适合数据格式完全规范的场景,没有校验逻辑。
  • 日期转换法:更严谨,能校验数据合法性,但性能略低于字符串操作(差异很小)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:02:13