使用 google-cloud 库执行 BigQuery 查询时出现异常
Posted
技术标签:
【中文标题】使用 google-cloud 库执行 BigQuery 查询时出现异常【英文标题】:Exception while using google-cloud library to execute BigQuery queries 【发布时间】:2021-06-24 10:37:12 【问题描述】:我正在尝试使用 google-cloud-bigquery 库从 spark 代码(来自 dataproc 集群)运行截断语句。
1)这是代码
import com.google.cloud.bigquery.BigQueryException, BigQueryOptions, QueryJobConfiguration
import com.google.cloud.http.BaseHttpServiceException
object BigQueryClient
def truncateBigQueryTable(tableName: String): Unit =
val bigquery = BigQueryOptions.getDefaultInstance.getService
try
val truncQuery = s"TRUNCATE TABLE `$tableName`"
val truncQueryConfig = QueryJobConfiguration.newBuilder(truncQuery).build
bigquery.query(truncQueryConfig)
catch
case e: BigQueryException =>println("Table truncation failed \n" + e.toString)
2)在 build.gradle 中,我添加了依赖
implementation group: 'com.google.cloud', name: 'google-cloud-bigquery', version: '1.133.0'
3)在 Spark 作业中,我还添加了 google-cloud-bigquery jar 作为依赖项。
--jars gs://bucket_name/google-cloud-bigquery-1.133.0.jar
但是当我运行 spark 作业时,它失败并出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/cloud/http/BaseHttpServiceException
我的问题是我错过了什么?因为我已经在 spark 作业中添加了 jar 作为参数。
【问题讨论】:
【参考方案1】:使用--packages com.google.cloud:google-cloud-bigquery:1.133.1
。它也会让 spark 下载所有的传递依赖项
【讨论】:
【参考方案2】:它在我的情况下运行
sparkSession
.conf()
.set(
"spark.jars.packages",
"com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.18.1");
请根据集群中的scala版本使用版本。
【讨论】:
导致问题的类是 BaseHttpServiceException ,它不是 spark-bigquery-with-dependencies jar 的一部分,而是 google-cloud-bigquery jar 的一部分。即使我添加了 jar在 spark submit 命令中,还是会抛出异常以上是关于使用 google-cloud 库执行 BigQuery 查询时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Google PubSub 确认 (@google-cloud/pubsub)
GCP - 无法在 Cloud Run 中使用 Google Secret Manager (@google-cloud/secret-manager)
使用 node.js 标准环境在 AppEngine 上找不到模块 @google-cloud/firestore
使用 Cloud Functions for Firebase 和 @google-cloud/storage 删除图像时出现问题
将 google-cloud 与 webpack 集成时遇到问题
导出 Firestore 备份数据的云功能。使用 firebase-admin 或 @google-cloud/firestore?