IntelliJ中使用Databricks Connect运行Spark作业报JAVA_9字段不存在错误
问题根因
java.lang.NoSuchFieldError: JAVA_9 错误的核心原因是运行时加载的Spark类版本与当前JDK环境、依赖类路径不匹配,可按照以下思路排查解决:
排查步骤
- 核对本地JDK版本与集群JDK版本一致性
不同版本的Databricks Runtime默认JDK版本存在差异:Runtime 7.x及以下默认使用JDK 8,Runtime 11.x及以上默认使用JDK 11。你需要确保IntelliJ项目的SDK版本、项目编译的字节码版本与集群JDK版本完全一致,禁止使用高于集群JDK版本的本地运行环境。 - 排查Spark依赖冲突
不要在项目的pom.xml/gradle.build等构建配置中引入开源版本的spark-core、spark-sql等Spark相关依赖,已引入的需将其scope设置为provided,完全使用Databricks Connect提供的定制化Spark Jar包,避免开源Spark和Databricks定制版Spark类加载冲突。 - 调整IDE依赖加载优先级
在IntelliJ的「项目结构-模块-依赖」设置中,将Databricks Connect对应的Jar库移动到依赖列表的最顶部,确保运行时优先加载Databricks提供的类;同时在运行配置中勾选「包含provided范围的依赖」选项,避免依赖遗漏。 - 校验Databricks Connect与集群版本匹配性
本地安装的Databricks Connect版本必须和目标Databricks集群的Runtime大版本完全一致,可通过执行databricks-connect --version查看本地版本,和集群配置页的Runtime版本核对,版本不匹配的需要卸载重装对应版本的Databricks Connect。 - 清理缓存重试
执行databricks-connect configure重新配置集群连接参数,然后在IntelliJ中执行「文件-失效缓存并重启」,清理IDE构建缓存后重新运行作业。
内容的提问来源于stack exchange,提问作者Rajesh Kumar Dash
相关产品推荐
相关产品推荐

