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

如何在Dataproc的PySpark中跨GCP项目访问BigQuery数据集

跨GCP项目使用PySpark读取BigQuery数据集的问题

我在Google Cloud中使用Python操作BigQuery、Dataproc、Workflows和Cloud Storage,目前拥有两个GCP项目:

  • gcp-project1:包含BigQuery数据集 gcp-project1.my_dataset.my_table
  • gcp-project2:存放我的myscript.py脚本及存储在Cloud Storage中的文件

我需要在myscript.py中,从Cloud Storage存储的文件(路径gs://path/bq.sql)读取SQL查询语句,查询gcp-project1中的BigQuery数据集。根据Spark-BigQuery连接器的要求,使用SQL查询读取BigQuery数据时,必须设置viewsEnabled=true和materializationDataset=dataset属性。

我尝试了以下几种配置方法,均以失败告终:

测试1

spark.conf.set("viewsEnabled", "true")
spark.conf.set("materializationDataset", "my_dataset")

错误信息:Not found: Dataset gcp-project2:my_dataset was not found in location...
原因:脚本在gcp-project2中运行,连接器默认在当前项目(gcp-project2)中查找my_dataset,但目标数据集实际在gcp-project1中。

测试2

spark.conf.set("viewsEnabled", "true")
spark.conf.set("materializationDataset", "gcp-project1.my_dataset")

错误信息:Dataset IDs must be alphanumeric (plus underscores) and must be at most 1024 characters long.
原因:直接将项目ID和数据集ID拼接作为materializationDataset的值,不符合数据集ID的格式要求。

测试3

spark.conf.set("viewsEnabled", "true")
spark.conf.set("materializationDataset", "my_dataset")

try:
    df = spark.read.format('bigquery') \
        .option('project', 'gcp-project1') \ # 指定数据集所在的项目gcp-project1
        .option('query', query1) \
        .load()
    df.printSchema()
    df.show(10)
except Exception as e:
    logger.error(f"Failed to read data from BigQuery: {e}")
    sys.exit(1)

错误信息:Not found: Dataset gcp-project2:my_dataset was not found in location...
原因:即使指定了project参数,连接器仍在当前项目(gcp-project2)中查找materializationDataset对应的数据集。


问题

如何配置我的PySpark脚本,使其在gcp-project2中运行时,能够成功读取gcp-project1中的BigQuery数据集?欢迎提供任何跨GCP项目交互数据集的实用建议。

内容的提问来源于stack exchange,提问作者Henry Xiloj Herrera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:13:17