PySpark DataFrame字符串列转日期列返回null的解决方法
解决Spark中
to_date转换英文月份日期返回null的问题 核心原因
你的Spark会话默认Locale不是英文,导致无法识别Jun、May这类英文月份缩写,转换失败后返回null。
解决方案
方案1:Spark 2.4+ 直接指定Locale(推荐)
to_date函数支持第三个参数指定Locale,直接用英文Locale解析即可:
from pyspark.sql.functions import to_date, col df = df.withColumn("DOB", to_date(col("DOB"), "yyyy-MMM-dd", "en_US"))
方案2:低版本Spark(<2.4)兼容写法
如果你的Spark版本不支持第三个参数,可通过unix_timestamp先转成时间戳,再转成日期:
from pyspark.sql.functions import unix_timestamp, to_date, col df = df.withColumn("DOB", to_date(unix_timestamp(col("DOB"), "yyyy-MMM-dd").cast("timestamp")))
方案3:全局设置Session的Locale
也可以在创建SparkSession时全局配置英文Locale,后续所有日期解析都会生效:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("DateConversion") \ .config("spark.sql.locale", "en_US") \ .getOrCreate()
内容的提问来源于stack exchange,提问作者SDE
相关产品推荐
相关产品推荐

