PySpark无法读取BigQuery公开数据集表的技术求助
PySpark连接BigQuery公开数据集失败的解决办法
问题场景
已正常初始化Spark会话,但执行以下代码读取BigQuery公开数据集bigquery-public-data.samples.shakespeare时报错:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName('Optimize BigQuery Storage') \ .config('spark.jars.packages', 'gs://spark-lib/bigquery/spark-3.1-bigquery-0.27.1-preview.jar') \ .getOrCreate() df = spark.read \ .format("bigquery") \ .load("bigquery-public-data.samples.shakespeare")
核心原因与解决方案
1. 缺失GCP身份认证
即使是公开数据集,Spark连接器仍需基础GCP身份验证才能访问BigQuery服务。
- 本地运行:设置环境变量指定服务账号密钥路径
export GOOGLE_APPLICATION_CREDENTIALS="/绝对路径/你的服务账号密钥.json" - Spark代码中配置:在SparkSession构建时添加认证配置
Dataproc集群运行可跳过此步骤,默认使用集群绑定的服务账号权限spark = SparkSession.builder \ .appName('Optimize BigQuery Storage') \ .config('spark.jars.packages', 'gs://spark-lib/bigquery/spark-3.1-bigquery-0.27.1-preview.jar') \ .config("google.cloud.auth.service.account.json.keyfile", "/绝对路径/你的服务账号密钥.json") \ .getOrCreate()
2. 未启用BigQuery Storage API
前往GCP控制台搜索BigQuery Storage API,确认该API已启用(读取BigQuery数据必须依赖此API,公开数据集也不例外)
3. 验证Jar包兼容性
当前使用的spark-3.1-bigquery-0.27.1-preview.jar与Spark 3.1版本匹配,若仍有问题,可替换为Maven仓库的稳定版依赖:
.config('spark.jars.packages', 'com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.27.1')
注意Scala版本需与Spark一致,Spark 3.1默认使用Scala 2.12
4. 显式指定临时GCS桶
若以上方法无效,可在读取时指定临时GCS桶(用于数据中转,需确保你拥有该桶的读写权限):
df = spark.read \ .format("bigquery") \ .option("table", "bigquery-public-data.samples.shakespeare") \ .option("temporaryGcsBucket", "你的临时GCS桶名称") \ .load()
内容的提问来源于stack exchange,提问作者user18708380
相关产品推荐
相关产品推荐

