使用 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?