使用 scala 从 spark 中删除 bigquery 表

Posted

技术标签:

【中文标题】使用 scala 从 spark 中删除 bigquery 表【英文标题】:delete bigquery table from spark by using scala 【发布时间】:2020-07-19 04:11:15 【问题描述】:

有没有办法使用 Scala 从 Spark 中删除 BigQuery 表?

我只找到了使用示例中的 Scala 从 Spark 读取和写入 BigQuery 表的方法: https://cloud.google.com/dataproc/docs/tutorials/bigquery-connector-spark-example

有人可以提供删除 BigQuery 表的示例吗?例如,我可以使用此语句“drop table if exists projectid1.dataset1.table1”在 BigQuery 控制台中删除一个表。

请注意,我删除现有表的目的不是覆盖。我只是想删除它。请帮忙。谢谢。

【问题讨论】:

为什么要从 Spark 中进行操作? Spark 是分析引擎,而不是 JDBC 或 SQL Developer。 @MikhailIonkin 这是分析过程中的一个步骤。 【参考方案1】:

请参考BigQuery API:

import com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryOptions, TableId

val bq = BigQueryOptions.getDefaultInstance().getService() 
val table = bq.getTable(TableId.of("projectid1", "dataset1", "table1"))
if(table != null) 
  table.delete()

请注意,这应该可以在 Dataproc 中使用。在其他集群中,您需要正确设置凭证

【讨论】:

谢谢@David Rabinowitz。我试过了,但它给了我一些错误:import com.google.cloud.bigquery.BigQueryOptions com.google.cloud.bigquery.BigQueryOptions import com.google.cloud.bigquery.BigQueryOptions scala> val bq = BigQueryOptions.getDefaultInstance()。 getService() java.lang.NoClassDefFoundError: com/google/common/base/MoreObjects at com.google.cloud.ServiceOptions.(ServiceOptions.java:290) ... 引起:java.lang.ClassNotFoundException: com .google.common.base.MoreObjects at java.net.URLClassLoader.findClass(URLClassLoader.java:382) 另外,顺便说一下,我在你提供的链接中找不到 scala 库,你能更具体一点吗? 没有 Scala API,只有 Java(兼容 Scala)。该库依赖于 Guava 的最新版本,其中 spark 提供了一个古老的版本 (14.0.1)。您可以将番石榴添加到您的项目中并对其进行遮蔽,这样它就不会与 Spark 的番石榴发生冲突。如果您使用 spark-bigquery-connector,那么您在 com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery 中有 bigquery 客户端(使用 spark-bigquery-with-dependencies 工件 与scala版本无关。请查看修改后的代码示例,看看它是否适合您。 你能先试试 spark-shell 吗?以上只是用 Scala 2.11.12 和 spark 2.4.5 测试过

以上是关于使用 scala 从 spark 中删除 bigquery 表的主要内容,如果未能解决你的问题,请参考以下文章

Spark Scala Dataframe:删除第 n 条记录

从 Kafka 主题读取数据处理数据并使用 scala 和 spark 写回 Kafka 主题

解决SecureCRT下spark-shell中scala无法删除问题

如何在 Spark/Scala 中查找具有许多空值的列

使用 Scala 从 Spark 的 withColumn 中调用 udf 时出错

使用 spark/scala 从 HDFS 目录中获取所有 csv 文件名