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

PySpark读取CSV文件时delimiter分割符未生效问题求助

问题解决:PySpark读取CSV时分隔符未生效,数据挤在第一列

问题根源分析

  1. 变量初始化错误:你把SparkSession实例赋值给了df_pyspark,这会导致后续spark.read依赖环境中已存在的spark变量,容易引发混淆或报错。
  2. 验证时机错误:第一次读取CSV时未指定分隔符,直接调用show()看到的是未拆分的结果;后续配置正确参数的读取操作完成后,没有再次验证结果。
  3. 参数冲突:同时设置schema和inferSchema=True会冲突,Spark会优先使用手动定义的Schema,inferSchema会被忽略;且定义的DateType列未指定解析格式,可能导致日期列解析失败。

修正后的代码

# 正确初始化SparkSession
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType, DateType

spark = SparkSession.builder.appName('Pratica').getOrCreate()

# 定义数据Schema
schema = StructType([
    StructField('Nome do funcionário', StringType(), True),
    StructField('CPF', StringType(), True),
    StructField('RG', StringType(), True),
    StructField('Data de Nascimento', DateType(), True),
    StructField('Data de admissão', DateType(), True),
    StructField('Departamento', StringType(), True),
    StructField('Função', StringType(), True)
])

# 正确读取CSV,移除冲突参数并添加日期解析规则
df_pyspark = (
    spark.read
    .format("csv")
    .schema(schema)
    .option("header", True)
    .option("charset", "ISO-8859-1")
    .option('delimiter',';')
    .option("dateFormat", "dd/MM/yyyy")  # 根据CSV实际日期格式调整,比如yyyy-MM-dd
    .load('/funcionarios/funcionarios.csv')
)

# 验证拆分结果与Schema
df_pyspark.printSchema()
df_pyspark.show()

关键修正点

  • 将SparkSession实例赋值给spark变量,避免变量混淆。
  • 移除inferSchema=True,手动定义Schema后该参数无效。
  • 添加dateFormat参数,确保DateType列能正确解析CSV中的日期字符串。
  • 在正确读取数据后执行验证操作,确认数据是否按预期拆分。

额外检查项

  • 用文本编辑器打开CSV文件,确认确实使用;作为分隔符。
  • 如果CSV中的日期格式不是dd/MM/yyyy,调整dateFormat参数为实际格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:43:12