Spark BigQuery连接器Scala版本不兼容问题求助
问题核心
升级DataProc VM到2.2-debian12后,提交任务时出现java.lang.IllegalStateException: This connector was made for Scala null, it was not meant to run on Scala 2.12错误,本质是指定的spark-bigquery-latest_2.12.jar与DataProc 2.2环境的Spark/Scala版本不匹配。
解决方案
1. 替换"latest"连接器为指定兼容版本
避免使用latest标签的jar包,该标签可能指向适配更高版本Scala/Spark的连接器,与DataProc 2.2环境冲突。指定适配Spark 3.3(DataProc 2.2默认Spark版本)和Scala 2.12的稳定版本,提交任务时修改jar包路径:
--jars gs://spark-lib/bigquery/spark-bigquery_2.12-0.33.0.jar
注:需确保连接器版本与DataProc的Spark版本、Scala 2.12完全匹配,可依据官方兼容规则选择对应版本。
2. 调整pom.xml中spark-bigquery依赖的scope
将pom里的spark-bigquery_2.12依赖设置为provided,避免本地构建包与DataProc提供的连接器产生冲突:
<dependency> <groupId>com.google.cloud.spark</groupId> <artifactId>spark-bigquery_2.12</artifactId> <version>0.19.0</version> <scope>provided</scope> </dependency>
DataProc运行时会提供连接器jar,本地构建无需将其打包进无依赖包。
3. 确认DataProc环境的Scala版本
DataProc 2.2-debian12默认使用Scala 2.12,确保所有依赖(包括连接器)均基于Scala 2.12编译,杜绝跨版本兼容问题。
错误原因说明
DataProc 2.2版本的Spark生态相较于2.0有所升级,spark-bigquery-latest_2.12.jar可能已更新为适配更高版本Spark/Scala的版本,而你代码依赖的旧版本连接器(0.19.0)与新环境的类加载逻辑冲突,导致连接器无法识别当前Scala版本,抛出错误。
内容的提问来源于stack exchange,提问作者Delevin Zhong

