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

Spark 3.0(Scala)读取ISO-8859-1编码多行CSV文件异常求助

CSV读取异常问题排查与解决

1. 修正代码拼写错误

你代码里的header选项值写错了,把"fale"改成"false"——这个低级错误可能直接导致解析逻辑异常:

val df = spark.read.format("csv") \
  .option("header", "false") \
  .option("multiline", "true") \
  .option("encoding", "ISO-8859-1") \
  .option("lineSep", "\u000A") \
  .option("delimiter", "\u0001") \
  .csv("path/to/csv/file.csv") 

2. 确认行分隔符匹配文件实际情况

你提到文件行分隔符但内容不完整,如果文件实际行分隔符不是\u000A(普通换行符),必须把lineSep改成对应的值:

  • 若为Windows换行(\r\n),设置为"\r\n"
  • 若为其他特殊分隔符,直接填入对应的转义字符或原始字符

3. 确保multiline功能生效的前提

multiline=true仅会将被引号包裹的跨行内容识别为单个字段,默认使用双引号作为包裹符。如果你的文件用了其他引号(比如单引号),需要额外配置:

.option("quote", "'")

如果跨行内容没有被引号包裹,Spark仍会按lineSep分割行,此时multiline设置不会起作用。

4. 解决空列问题

空列通常由以下原因导致,对应解决方式:

  • 分隔符不匹配:确认\u0001(SOH字符)是文件真实分隔符,没有混淆类似控制字符
  • 行尾多余分隔符:添加.option("ignoreTrailingWhiteSpace", "true")忽略字段末尾空白,避免误判空列
  • 自动推断Schema出错:如果是固定列数的CSV,自定义Schema来强制约束列结构,示例:
    import org.apache.spark.sql.types._
    val customSchema = StructType(Array(
      StructField("col1", StringType, nullable = true),
      StructField("col2", IntegerType, nullable = true)
      // 按实际列数添加字段定义
    ))
    val df = spark.read.format("csv") \
      .schema(customSchema) \
      // 其他配置选项
      .csv("path/to/csv/file.csv")
    

关于编码的说明

Spark 3.0完全支持encoding配置,你设置的ISO-8859-1是有效的,不存在版本兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 23:02:24