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

Scala内核Jupyter中Spark读取CSV报Illegal pattern component: XXX错

报错根因定位

该错误由Spark依赖的commons-lang3包版本和JDK版本不兼容导致:

  • 报错栈显示触发点为CSV读取配置初始化阶段CSVOptions.<init>,和你提供的CSV文件内容无关(文件内无日期/时间类字段)
  • JDK 9及以上版本默认的时间戳格式包含XXX模式字符,而commons-lang3 3.5以下版本不识别该模式字符,Spark初始化CSV读取配置时读取全局默认的时间格式参数就会抛出该异常
解决方法

按优先级选择即可:

方法1(最便捷,无需修改环境)

读取CSV时显式指定不含XXX的时间格式参数,覆盖默认配置,修改后的代码如下:

import org.apache.spark.sql._

val spark = {
  NotebookSparkSession.builder()
    .master("local[*]")
    .getOrCreate()
}

val df = spark.read
         .format("csv")
         .option("header", "true")
         .option("mode", "DROPMALFORMED")
         // 新增以下两行配置即可解决问题
         .option("timestampFormat", "yyyy-MM-dd'T'HH:mm:ss.SSS")
         .option("dateFormat", "yyyy-MM-dd")
         // 可选:如果你需要自动推断字段类型(比如id识别为整数),可以加下面这行
         .option("inferSchema", "true")
         .load("/home/user/ml-projects/housing-classification-example-scala/data/file.csv")

df.printSchema()

方法2(修复依赖冲突)

升级环境中的commons-lang3包到3.5及以上版本:

  • 如果你使用Almond作为Scala内核,可在Notebook开头加入如下代码指定高版本依赖:
import $ivy.`org.apache.commons:commons-lang3:3.14.0`
  • 如果你使用自行部署的Spark集群,替换Spark安装目录jars文件夹下的commons-lang3 jar包为3.5及以上版本即可

方法3(版本适配)

升级Spark版本到2.4.0及以上,新版本Spark已默认适配高版本JDK的时间格式规则,依赖的commons-lang3版本也满足要求。

验证效果

修改完成后重新运行代码,可正常输出Schema:

root
 |-- id: integer (nullable = true)
 |-- name: string (nullable = true)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:48:01