如何在PySpark中将DataFrame日期列格式从dd-mm-yyyy转换为yyyy-mm-dd
PySpark日期格式转换:dd-mm-yyyy → yyyy-mm-dd
嘿,这个需求太常见了,我给你两种靠谱的处理方式,根据你的实际场景选就行:
方法1:转成指定格式的字符串
如果你的原始列是字符串类型,先把它解析成PySpark的日期类型,再格式化成你要的yyyy-mm-dd字符串格式就行。直接上代码:
from pyspark.sql import SparkSession from pyspark.sql.functions import to_date, date_format # 先准备测试数据方便你验证 spark = SparkSession.builder.appName("DateConvertDemo").getOrCreate() sample_data = [("01-01-1999",), ("15-03-2020",), ("31-12-2023",)] df = spark.createDataFrame(sample_data, ["original_date"]) # 核心转换逻辑 df_result = df.withColumn( "formatted_date", date_format(to_date(df["original_date"], "dd-MM-yyyy"), "yyyy-MM-dd") ) # 查看转换结果 df_result.show()
这里要注意两个关键细节:
to_date的第二个参数是原始日期的格式,这里填dd-MM-yyyy(大写MM代表月份,小写mm是分钟,千万别搞混!)date_format的参数是你想要的目标格式,填yyyy-MM-dd就能得到标准的年-月-日字符串
方法2:转为标准日期类型(更推荐)
如果后续还要做日期相关操作(比如日期过滤、加减、按日期聚合),其实没必要转成字符串,直接把原始字符串解析成PySpark的DateType就好。PySpark显示日期类型时,默认就是yyyy-MM-dd的格式,而且这种类型天生支持各种日期运算,实用性更强:
df_with_date_type = df.withColumn( "standard_date", to_date(df["original_date"], "dd-MM-yyyy") ) # 查看列类型和转换结果 df_with_date_type.printSchema() df_with_date_type.show()
执行后你会发现standard_date列的类型是date,显示出来的就是1999-01-01这种标准格式,完美匹配你的需求。
小提示
如果原始数据里有格式不规范的日期(比如32-01-2023这种无效日期),to_date会返回null。要是需要处理这种异常情况,可以用coalesce给个默认值,或者用when做条件判断来过滤/修正。
内容的提问来源于stack exchange,提问作者Jamie Arodi
相关产品推荐
相关产品推荐

