使用PySpark的spark.read.csv读取CSV文件时的格式问题求助
解决PySpark读取CSV时列错位及多余引号问题
问题根源
你的CSV文件中review字段包含带引号的多行文本,PySpark默认CSV解析器未正确识别这种格式:
- 把字段内的换行当成行分隔符,导致列错位(
sentiment列出现review内容) - 未正确处理字段内的转义引号,导致残留多余引号
解决方案
1. 配置CSV读取参数(核心解决方法)
在spark.read.csv中添加以下关键参数,让解析器正确识别带引号的多行字段:
df = spark.read.csv( "你的文件路径.csv", header=True, # 仅当CSV有表头时启用 inferSchema=True, quote='"', # 指定字段包裹符为双引号 escape='"', # 指定转义字符为双引号(处理字段内的双引号) multiLine=True # 允许字段跨多行解析 )
multiLine=True:解决行错位问题,告诉Spark不要把字段内的换行当作新行escape='"':让Spark识别字段内的转义引号(例如"He said ""hello"""会被解析为He said "hello")quote='"':明确指定字段的包裹符号,避免解析歧义
2. 清理残留的多余引号
如果配置参数后仍有首尾引号残留,用正则表达式清理:
from pyspark.sql.functions import regexp_replace df = df.withColumn( "review", regexp_replace("review", '^"|"$', '') # 移除字段首尾的双引号 )
3. 排查额外可能问题
- 确认CSV的分隔符:如果不是逗号,添加
sep参数(例如sep="\t"表示制表符分隔) - 检查表头:如果CSV没有表头,不要设置
header=True,否则会把第一行数据当作表头导致列错位
内容的提问来源于stack exchange,提问作者Ibtissam Youb
相关产品推荐
相关产品推荐

