我想使用 pysparkSQL
来检查在Hive中是否存在一个名为 schemaname.tablename
的表。
在Scala中有一个选项:spark.catalog.tableExists("schemaname.tablename")
。然而,pySpark
没有相同的功能。
寻找一种快速、干净的方法来检查使用 PySpark
是否存在Hive表。
我想使用 pysparkSQL
来检查在Hive中是否存在一个名为 schemaname.tablename
的表。
在Scala中有一个选项:spark.catalog.tableExists("schemaname.tablename")
。然而,pySpark
没有相同的功能。
寻找一种快速、干净的方法来检查使用 PySpark
是否存在Hive表。
pyspark.sql.catalog
模块包含在spark >= 2.3.0中。
如果您正在使用spark < 2.3.0,则可以按以下方式使用:
spark._jsparkSession.catalog().tableExists("schema.table")
True
spark._jsparkSession.catalog().tableExists("schema.table_false")
False
或
spark.catalog._jcatalog.tableExists("schema.table")
True
spark.catalog._jcatalog.tableExists("schemaname.tablename")
以下是更多的选项。首先,让我们从任意数据框创建一些随机表格,使用以下代码df.write.saveAsTable("your_table")
。
选项1 - Spark >= 2.0
使用spark.catalog.listTables
即:
"your_table" in [t.name for t in spark.catalog.listTables("default")] == True
选项2 - Spark >= 1.3
使用sqlContext.tableNames
,即:
"your_table" in sqlContext.tableNames("default") == True
选项三
使用 spark.sql
即:
spark.sql("SHOW TABLES LIKE 'your_table'").count() == 1
在使用Pyspark 3.3.0及以上版本时,判断Hive中是否存在一个表schemaname.tablename的解决方案是:spark.catalog.tableExists("schemaname.tablename")
,最好不要使用隐藏方法。
def tableExists(tableName,schemaName='default'):
return spark.sql(f"show tables in {schemaName} like '{tableName}'").count() == 1