You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark定义Schema后读取CSV遇空值,如何转换日期时间字段类型?

问题分析与解决方案

首先你代码里存在一个矛盾点:同时设置了inferSchema=true和自定义.schema(schema),Spark会优先使用自定义Schema,但inferSchema会干扰解析逻辑,这很可能是导致字段出现空值的原因之一,建议直接移除option("inferSchema", "true")。

针对DateType和TimestampType字段的类型转换,分两种常用场景处理:

一、读取CSV时直接指定格式解析(推荐)

CSV中的日期/时间戳本质是字符串,Spark默认解析格式可能和你的数据不匹配,需显式指定格式:

1. 解析日期字段

假设你的bch_date格式为yyyy-MM-dd,添加dateFormat选项:

df_dataframe = (
    spark.read
    .option('header', True)
    .option("dateFormat", "yyyy-MM-dd")  # 匹配CSV中日期字符串的实际格式
    .schema(schema)
    .csv('test.csv')
)

2. 解析时间戳字段

假设时间戳格式为yyyy-MM-dd HH:mm:ss.SSS,添加timestampFormat选项:

df_dataframe = (
    spark.read
    .option('header', True)
    .option("dateFormat", "yyyy-MM-dd")
    .option("timestampFormat", "yyyy-MM-dd HH:mm:ss.SSS")  # 匹配时间戳字符串格式
    .schema(schema)
    .csv('test.csv')
)

二、读取后手动转换(适配多格式场景)

如果不同日期/时间戳字段格式不统一,或读取后部分字段因格式不匹配变为空值,可使用Spark内置函数手动转换:

1. 转换日期字段

from pyspark.sql.functions import to_date

df_dataframe = df_dataframe.withColumn(
    "bch_date",
    to_date(df_dataframe["bch_date"], "yyyy-MM-dd")  # 对应CSV中的实际格式
)

2. 转换时间戳字段

from pyspark.sql.functions import to_timestamp

# 单个字段转换
df_dataframe = df_dataframe.withColumn(
    "secr_attoc_stt_ts",
    to_timestamp(df_dataframe["secr_attoc_stt_ts"], "yyyy-MM-dd HH:mm:ss")
)

# 批量转换所有时间戳字段
timestamp_cols = ["secr_attoc_stt_ts", "secr_alloc_end_ts", "crte_tstp", "last_updt_tstp"]
for col in timestamp_cols:
    df_dataframe = df_dataframe.withColumn(
        col,
        to_timestamp(df_dataframe[col], "yyyy-MM-dd HH:mm:ss")
    )

三、空值处理补充

  • 转换时如果字符串格式不匹配,结果会返回null,可使用coalesce兜底处理异常值:
from pyspark.sql.functions import coalesce, lit
from pyspark.sql.types import DateType

df_dataframe = df_dataframe.withColumn(
    "bch_date",
    coalesce(to_date(df_dataframe["bch_date"], "yyyy-MM-dd"), lit(None).cast(DateType()))
)
  • 若需过滤空值,可使用df_dataframe.filter(df_dataframe["bch_date"].isNotNull())

内容的提问来源于stack exchange,提问作者Sandilya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:45:38