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

Scala版本不一致引发scala.$less$colon$less类找不到问题排查

问题根源与解决方案

结论

你遇到的java.lang.ClassNotFoundException: scala.$less$colon$less错误,完全是Scala版本不匹配导致的。

Spark核心编译依赖特定版本的Scala,你的本地Spark基于Scala 2.12.17构建,但引入的Kafka、Cassandra相关依赖包却是Scala 2.13版本——这两个版本的Scala字节码不兼容,会导致Spark无法找到对应版本的Scala核心类(scala.$less$colon$less是Scala语法糖对应的底层类,版本差异会直接引发找不到的问题),进而传递到Python层触发AttributeError。

版本对齐方法

1. 锁定Spark对应Scala版本

Spark 3.x系列绝大多数稳定版本默认基于Scala 2.12编译(少数新版本开始支持2.13,但你的本地环境是2.12.17,优先保持统一),所有依赖必须使用Scala 2.12后缀的包。

2. 替换对应版本的依赖包

  • Kafka连接依赖:使用spark-sql-kafka-0-10_2.12,版本需与你的Spark版本严格匹配。比如你的Spark是3.3.0,就用org.apache.spark:spark-sql-kafka-0-10_2.12:3.3.0。
  • Cassandra连接依赖:使用spark-cassandra-connector_2.12,版本要与Spark版本兼容。比如Spark 3.3.x对应com.datastax.spark:spark-cassandra-connector_2.12:3.3.0。

3. 正确提交脚本或配置IDE依赖

  • 命令行提交时,通过--packages参数指定正确依赖:
    spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.3.0,com.datastax.spark:spark-cassandra-connector_2.12:3.3.0 your_pyspark_script.py
    
  • 本地IDE运行时,在依赖管理中(比如pip的pyspark配置,或项目的maven/gradle配置)明确指定带Scala 2.12后缀的依赖包,避免自动拉取错误版本。

4. 清理环境缓存

检查Spark的classpath路径,确保没有残留的Scala 2.13版本依赖包;同时清理本地的Maven/Ivy缓存(比如~/.m2/repository或~/.ivy2/cache),避免旧版本干扰。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:11:02