PySpark连接Big Query报错求助:Scala版本兼容问题排查
问题解决方向
核心问题定位
报错中的关键信息:This connector was made for Scala null, it was not meant to run on Scala 2.12,说明BigQuery Connector依赖包与Scala/Spark版本不兼容,且存在重复依赖冲突。
具体解决步骤
1. 清理重复的Jar依赖
你的spark.jars.packages中同时引入了多个功能重叠的BigQuery Connector包(spark-3.2-bigquery:0.30.0、spark-bigquery-with-dependencies_2.12:0.30.0、spark-bigquery_2.12:0.30.0),这些包会导致版本冲突,且不带Scala版本后缀的包无法正确识别当前Scala环境。
只需保留spark-bigquery-with-dependencies_2.12:0.30.0即可,它已包含所有BigQuery连接所需的依赖,无需额外添加其他BigQuery相关包。
2. 修正Spark配置
更新依赖配置,同时规范SparkSession的创建方式(Spark 3.x推荐通过SparkSession统一配置,避免先创建SparkContext导致的冲突):
# Scala version 2.12.15 # Spark Version 3.2.1 from pyspark.sql import SparkSession spark = SparkSession.builder.appName('pyspark-big-data-workflow') \ .config('spark.jars.packages', 'com.google.cloud.bigdataoss:gcs-connector:hadoop3-2.2.0,com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.30.0') \ .config('spark.storage.memoryFraction', '1') \ .config('spark.executor.instances', '20') \ .config('spark.executor.cores', '15') \ .config('spark.executor.memory', '4g') \ .config('spark.driver.memory', '8g') \ .config('spark.serializer', 'org.apache.spark.serializer.KryoSerializer') \ .getOrCreate() sc = spark.sparkContext
3. 验证版本兼容性
spark-bigquery-with-dependencies_2.12:0.30.0官方支持Spark 3.2.x和Scala 2.12.x,与你的环境匹配gcs-connector:hadoop3-2.2.0适配Hadoop 3.x,与Spark 3.2.1默认的Hadoop版本兼容
4. 重新运行加载代码
保持数据加载代码不变,重新执行:
table = 'table.name' df = spark.read.format('bigquery') \ .option('table', table)\ .load() df.show() df.printSchema()
(注:变量名rdd实际指向DataFrame,改为df更准确,但不影响功能)
内容的提问来源于stack exchange,提问作者Timothy Mcwilliams
相关产品推荐
相关产品推荐

