PySpark如何将特定格式字符串转换为yyyy-mm-dd日期格式?
解决Spark中日期字符串转yyyy-mm-dd格式的问题
你的日期字符串格式是Mon, 01 Mar 2021 13:23:06 +0000,之前代码生成NULL是因为substring截取的内容格式和to_date指定的格式不匹配,而且Spark的substring起始索引从1开始计数,你之前的截取范围不对。
方案1:直接解析完整日期字符串(推荐)
不用截取,直接给to_date指定原字符串对应的格式即可:
from pyspark.sql.functions import to_date df = df.withColumn('date', to_date('test_started_at', 'EEE, dd MMM yyyy HH:mm:ss Z'))
格式说明:
EEE:星期缩写(如Mon)dd:两位日期MMM:月份缩写(如Mar)yyyy:四位年份HH:mm:ss:时分秒Z:时区偏移(如+0000)
方案2:修正截取逻辑后解析
如果一定要先截取日期部分,调整substring的起始位置和长度,确保截取到01 Mar 2021格式,再匹配对应的解析格式:
from pyspark.sql.functions import substring, to_date # 从第6位开始取11个字符,得到"01 Mar 2021" df = df.withColumn('test_date', substring('test_started_at', 6, 11)) # 解析格式要和截取后的字符串匹配,是空格分隔的dd MMM yyyy df = df.withColumn('date', to_date('test_date', 'dd MMM yyyy'))
注:之前你指定的dd-MMM-yyyy是横杠分隔格式,但截取后的字符串是空格分隔,格式不匹配才导致解析失败。
内容的提问来源于stack exchange,提问作者Datamaniac
相关产品推荐
相关产品推荐

