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 中的配置单元表?