spark - scala - 如何检查配置单元中是不是存在表

Posted

技术标签:

【中文标题】spark - scala - 如何检查配置单元中是不是存在表【英文标题】: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 类。 【参考方案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);

【讨论】:

以上是关于spark - scala - 如何检查配置单元中是不是存在表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用配置单元上下文有效地查询 Spark 中的配置单元表?

Spark Scala创建外部配置单元表不使用位置作为变量

如何使用 spark/scala 检查是不是存在大查询表

Spark Scala,如何检查数据框中是不是存在嵌套列

如何检查列数据 Spark scala 上的 isEmpty

如何在 spark scala 中检查与其关联的列名和数据是不是匹配