PySpark将字符串列转为日期格式时出现Null值问题求助
PySpark字符串日期转日期格式全为Null的解决办法
核心问题是日期格式模板不匹配:你的原始日期字符串是dd/MM/yyyy格式(例如21/01/1998),但转换时使用了yyyy-MM-dd的模板,PySpark无法解析不匹配的格式,因此返回Null。空字符串本身转换后也会是Null,这是预期行为,但可以按需处理。
解决方案1:使用正确的格式模板转换
首先确保导入to_date函数,然后使用匹配的格式字符串dd/MM/yyyy:
from pyspark.sql.functions import to_date # 正确的日期转换代码 df3 = df1.select(to_date(df1.Date, 'dd/MM/yyyy').alias('dt')) df3.show()
执行后输出:
+----------+ | dt| +----------+ |1998-01-21| |1997-06-20| | null| | null| | null| +----------+
有效格式的日期会被正确转换,空字符串仍为Null。
解决方案2:处理空字符串(可选)
如果需要保留空字符串而非转为Null,或替换为默认日期,可以使用when函数:
保留空字符串
from pyspark.sql.functions import when df3 = df1.select( when(df1.Date != '', to_date(df1.Date, 'dd/MM/yyyy')).otherwise(df1.Date).alias('dt') ) df3.show()
替换空字符串为默认日期
df3 = df1.select( when(df1.Date != '', to_date(df1.Date, 'dd/MM/yyyy')).otherwise(to_date('1900-01-01', 'yyyy-MM-dd')).alias('dt') ) df3.show()
内容的提问来源于stack exchange,提问作者Bahubali Sharma
相关产品推荐
相关产品推荐

