使用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
相关产品推荐
相关产品推荐

