Dataproc运行PySpark作业提示google.cloud.spark module not found报错
问题诱因
- Dataproc集群默认镜像未预装Spark BigQuery连接器,报错提示缺失的
google.cloud.spark模块属于该连接器的内置依赖,集群作业运行时找不到对应依赖包就会抛出该异常。 - 现有代码存在用法错误:
load()方法默认接收BigQuery全量表路径作为入参,直接将SQL查询字符串传入该方法,即使依赖问题解决也会触发运行报错;同时查询语句中带空格的字段col a未做转义,也会导致SQL执行失败。
解决方案
- 补齐BigQuery Spark连接器依赖
- 新建Dataproc集群时,可在集群可选组件配置中直接勾选启用BigQuery连接器,集群启动时会自动匹配当前Spark、Scala版本安装适配的依赖包,无需手动上传配置。
- 针对已创建的存量集群,提交PySpark作业时可通过
--jars参数传入和集群Spark、Scala版本完全匹配的BigQuery连接器jar包,作业启动时会自动加载对应依赖。
- 修正PySpark读取BigQuery的代码逻辑
自定义SQL查询场景下,需要将SQL语句通过query配置项传入,不能直接作为load()的入参,同时对带空格的字段、表名加反引号转义,正确代码示例如下:
如果是直接读取整表数据,可直接将表的全路径(格式为query = "select max(`col a`) from `你的项目ID.你的数据集名.你的表名`" df = spark.read.format('bigquery') \ .option('query', query) \ .load()项目ID.数据集名.表名)传入load()方法,无需额外配置query参数。 - 校验服务账号权限
确认Dataproc集群绑定的服务账号已授予BigQuery Job User、BigQuery Data Viewer等必要权限,避免依赖修复后因权限不足无法读取数据。
内容的提问来源于stack exchange,提问作者Sahasil
相关产品推荐
相关产品推荐

