【问题标题】:spark - scala - How can I check if a table exists in hivespark - scala - 如何检查配置单元中是否存在表
【发布时间】:2017-09-28 19:53:26
【问题描述】:

我必须使用 spark(1.6.2) scala 检查 hive 中是否存在表

如果不需要,我必须创建一个空数据框并将其保存为配置单元表。

如果存在,则覆盖现有表。

我需要一个返回布尔值的函数,据此我可以做出上述决定(是创建新表还是覆盖现有表)

【问题讨论】:

  • 其实我的 spark 版本是 1.6.2,我尝试在 sqlContext 类中寻找可用的方法,但没有找到。感谢上面的链接。我看到它有 tableExists 方法,但没有找到 1.6.2 版本的 spark.sql.catalog 类。

标签: scala apache-spark


【解决方案1】:

1.x:

def tableExists(table: String, sqlContext: SQLContext) =
  sqlContext.tableNames.contains(table)

2.x:

def tableExists(table: String, spark: SparkSession) =
  spark.catalog.tableExists(table)

2.1.x 或更高版本。

您可以使用spark.catalog.tableExists。学分转到 Huseyin Oktaypointing that out

【讨论】:

  • 请记住,您必须先spark.catalog.setCurrentDatabase("database_name")。幼稚的spark.catalog.tableExists("database_name.table_name") 是行不通的。
  • 我能够在 spark 2.1.x 及更高版本中找到 tableExists。仅供参考。
  • spark.catalog.tableExists("database_name.table_name") 在 Spark 2.2.1 版本中为我工作。
  • 我正在使用 spark 2.1.0 并且必须使用 spark.catalog.setCurrentDatabase("database_name")spark.catalog.tableExists("table_name")
  • 不幸的是,PySpark 不直接支持 tableExists 函数 PySpark 2.1.1 Scala 2.1.1 但是我们可以访问 Java 对象并通过 spark._jsparkSession.catalog().tableExists('db_name', 'table_name) 手动触发该函数。更多关于 Scala 目录的文档 here
【解决方案2】:

我们也可以使用如下的数据库名称来定义它。

1.6.x

sqlContext.tableNames("db_name").contains("tbl_name")

2.x:

spark.catalog.tableExists("db_name", "tbl_name")

【讨论】:

    【解决方案3】:

    对于 spark 3.x Java,以下对我有用

    boolean isTablePresent = sparkSession.catalog().tableExists({db_name},{table_name});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 2021-11-17
      • 2023-03-10
      • 2019-09-12
      • 2019-10-04
      • 1970-01-01
      • 2020-07-19
      相关资源
      最近更新 更多