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

Spark Connect客户端运行报错java.lang.NoClassDefFoundError求助

解决Spark Connect客户端NoClassDefFoundError问题

问题原因

你遇到的NoClassDefFoundError是因为Spark Connect对依赖做了shading处理(比如将Guava类移到org.sparkproject.connect.client.com.google.common路径下),直接用sbt run运行时,类路径可能未完整包含这些shaded类,或者存在依赖版本冲突。

解决方案

1. 打包成Fat Jar运行

将所有依赖(包括shaded后的类)打包成单个jar是最可靠的解决方式:

  • 在project/plugins.sbt中添加sbt-assembly插件:
    addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.2.0")
    
  • 在build.sbt中配置合并策略(避免打包时的文件冲突):
    assemblyMergeStrategy in assembly := {
      case PathList("META-INF", _*) => MergeStrategy.discard
      case _ => MergeStrategy.first
    }
    
  • 执行打包命令:
    sbt assembly
    
  • 运行生成的Fat Jar:
    java -jar target/scala-2.12/[你的项目名]-assembly-[版本号].jar
    

2. 排除冲突的原生Guava依赖

如果项目中其他依赖引入了原生Guava,会和Spark Connect的shaded版本冲突,导致类加载异常。在build.sbt中排除原生Guava:

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-connect-client-jvm" % "3.5.0" exclude ("com.google.guava", "guava")
)

// 全局排除所有依赖中的原生Guava(可选)
excludeDependencies += "com.google.guava" % "guava"

3. 匹配客户端与服务端版本

确保本地运行的Spark Connect服务端版本也是3.5.0,客户端和服务端版本必须完全一致,否则会出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:23:29