PySpark读取CSV文件时delimiter分割符未生效问题求助
问题解决:PySpark读取CSV时分隔符未生效,数据挤在第一列
问题根源分析
- 变量初始化错误:你把
SparkSession实例赋值给了df_pyspark,这会导致后续spark.read依赖环境中已存在的spark变量,容易引发混淆或报错。 - 验证时机错误:第一次读取CSV时未指定分隔符,直接调用
show()看到的是未拆分的结果;后续配置正确参数的读取操作完成后,没有再次验证结果。 - 参数冲突:同时设置
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
相关产品推荐
相关产品推荐

