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

使用PySpark的when子句将多格式字符串日期转换为标准日期格式

PySpark多格式字符串日期统一转换实现
  • 实现逻辑:通过when分支匹配不同的日期字符串格式,配合to_date解析为日期类型后,再格式化为标准yyyy-MM-dd字符串即可。
  • 完整可运行代码:
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, when, to_date, date_format

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

# 构造测试数据
data = [
    ("Ram", "E01", "09/29/2018"),
    ("Mara", "E02", "07/14/2017"),
    ("Test", "E03", "01/01/18")
]
df = spark.createDataFrame(data, schema=["name", "code", "DATE_invoice"])

# 日期转换逻辑
df_converted = df.withColumn("DATE_invoice",
    # 匹配MM/dd/yyyy格式(4位年份)
    when(col("DATE_invoice").rlike(r"^\d{2}/\d{2}/\d{4}$"), 
         date_format(to_date(col("DATE_invoice"), "MM/dd/yyyy"), "yyyy-MM-dd"))
    # 匹配MM/dd/yy格式(2位年份)
    .when(col("DATE_invoice").rlike(r"^\d{2}/\d{2}/\d{2}$"),
         date_format(to_date(col("DATE_invoice"), "MM/dd/yy"), "yyyy-MM-dd"))
    # 无法匹配的格式保留原值,也可根据需求设为null
    .otherwise(col("DATE_invoice"))
)

# 查看结果
df_converted.show(truncate=False)
  • 运行输出结果:
+----+----+------------+
|name|code|DATE_invoice|
+----+----+------------+
|Ram |E01 |2018-09-29  |
|Mara|E02 |2017-07-14  |
|Test|E03 |2018-01-01  |
+----+----+------------+
  • 补充说明:如果后续有其他日期格式,直接在when分支链里新增对应匹配规则和解析格式即可。

内容的提问来源于stack exchange,提问作者Raja Sabarish PV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:09:03