Spark DataFrame字符串转date类型结果全为null问题求助
解决Spark DataFrame字符串日期转date类型全为null的问题
问题原因
- Spark默认的日期解析格式是
yyyy-MM-dd,而你的日期字符串是yyyyMMdd(无分隔符)格式,直接使用cast('date')无法识别,导致转换失败返回null。 - 数据中的"null"是字符串类型,不是Spark原生的null值,同样会导致
cast转换失败。
解决方案
使用Spark的to_date函数,手动指定日期格式来完成转换,该函数会自动将无法解析的字符串(比如"null")转为null值。
代码示例
from pyspark.sql.functions import to_date, col # 创建数据列表 data = [(1, "20230517"), (2, "20230518"), (3, "20230519"), (4, "null")] df = spark.createDataFrame(data, ("id", "date")) # 使用to_date指定格式转换 df1 = df.withColumn("date", to_date(col("date"), "yyyyMMdd")) df1.select('date').show()
执行结果
+----------+ | date| +----------+ |2023-05-17| |2023-05-18| |2023-05-19| | null| +----------+
补充:提前替换字符串"null"为原生null
如果需要明确将字符串"null"替换为Spark原生null值,可先做数据清洗再转换:
from pyspark.sql.functions import when, to_date, col df_clean = df.withColumn("date", when(col("date") == "null", None).otherwise(col("date"))) df1 = df_clean.withColumn("date", to_date(col("date"), "yyyyMMdd")) df1.select('date').show()
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

