如何在Spark中将yyMMdd格式字符串转为带正确年份的dd-MM-yyyy日期
Spark原生实现yyMMdd字符串转dd-MM-yyyy格式方案
操作出错原因
你之前使用原生方法无法正确识别年份,核心是没有给日期解析函数传入和输入格式完全匹配的格式模板字符串,Spark默认不会自动适配yyMMdd这种紧凑两位年的输入格式,导致解析逻辑错乱。
实现代码
核心逻辑为两步:首先用to_date函数按yyMMdd模板将输入字符串解析为Spark原生日期类型,再用date_format函数将日期类型转换为目标格式的字符串,全程使用原生优化函数,无额外性能损耗,支持分布式处理超大规模数据集。
PySpark示例
from pyspark.sql import functions as F # 替换df为你的DataFrame变量名 df = df.withColumn( "t_date1", F.date_format( F.to_date(F.col("col"), "yyMMdd"), "dd-MM-yyyy" ) )
Scala Spark示例
import org.apache.spark.sql.functions._ val resultDF = df.withColumn( "t_date1", date_format( to_date(col("col"), "yyMMdd"), "dd-MM-yyyy" ) )
注意事项
Spark 3.x默认启用严格日期解析规则,若输入字段存在不符合yyMMdd格式的非法值,解析结果会返回null。如果需要兼容Spark 2.x的宽松解析逻辑,可在会话启动时添加配置:spark.sql.legacy.timeParserPolicy=LEGACY
内容的提问来源于stack exchange,提问作者whatsinthename
相关产品推荐
相关产品推荐

