Pyspark字符串转timestamp时如何兼容多种日期时间格式
PySpark 混合日期格式统一解析方案
可通过coalesce结合多格式to_timestamp的组合实现单个表达式兼容两种日期格式解析,具体实现如下:
from pyspark.sql import functions as sql_functions order_dates = order_dates.withColumn( "order_completed_at_test", sql_functions.coalesce( # 按优先级依次尝试不同格式解析 sql_functions.to_timestamp(sql_functions.col("order_completed_at"), "MM/dd/yyyy HH:mm"), sql_functions.to_timestamp(sql_functions.col("order_completed_at"), "yyyy-MM-dd HH:mm"), sql_functions.to_timestamp(sql_functions.col("order_completed_at"), "MM/dd/yyyy"), sql_functions.to_timestamp(sql_functions.col("order_completed_at"), "yyyy-MM-dd") ) ) # static_date格式统一,保留原有逻辑即可 order_dates = order_dates.withColumn("static_date_test", sql_functions.to_timestamp("static_date"))
逻辑说明
to_timestamp在无法匹配指定格式时会返回null,coalesce会按顺序返回第一个非空的解析结果,自动适配对应格式- 可根据实际业务场景调整格式优先级和规则数量,存在格式匹配歧义时,将需要优先匹配的规则放在前面即可
- 该方案仅适合格式种类明确且数量较少的场景,你同步要求客户调整源数据格式的方案更稳妥,可避免后续新增未知格式导致的解析错误。
内容的提问来源于stack exchange,提问作者DBA108642
相关产品推荐
相关产品推荐

