使用pyspark检查配置单元元存储中是否存在表

z18hc3ub  于 2021-06-24  发布在  Hive
关注(0)|答案(6)|浏览(513)

我正在尝试检查配置单元元存储中是否存在表如果不存在,请创建表。如果表存在,则追加数据。
我有以下代码片段:

spark.catalog.setCurrentDatabase("db_name")
db_catalog = spark.catalog.listTables(dbName = 'table_name)
if any(table_name in row for row in db_catalog):
    add data
else:
    create table

然而,我得到一个错误。

>>> ValueError: Some of types cannot be determined after inferring

我无法解决值错误,因为在配置单元元存储中创建的其他数据库的表也会出现相同的错误。是否有其他方法可以检查配置单元元存储中是否存在表?

jjhzyzn0

jjhzyzn01#

您可以使用jvm对象来实现这一点。

if spark._jsparkSession.catalog().tableExists('db_name', 'tableName'):
  print("exist")
else:
  print("Not Exist")

py4j套接字用于python功能。其他操作使用jvm SparkContext .
在spark scala中,您可以直接访问。

spark.catalog.tableExists("dbName.tableName")
vxbzzdmp

vxbzzdmp2#

在pyspark2.4.0中,可以使用以下两种方法之一检查表是否存在。请记住,spark课程( spark )已创建。

table_name = 'table_name'
db_name = None

从spark会话的上下文创建sql上下文

from pyspark.sql import SQLContext

sqlContext = SQLContext(spark.sparkContext)
table_names_in_db = sqlContext.tableNames(db_name)

table_exists = table_name in table_names_in_db

使用spark会话目录

tables_collection = spark.catalog.listTables(db_name)
table_names_in_db = [table.name for table in tables_collection]

table_exists = table_name in table_names_in_db

我会使用第一种方法,因为第二种方法似乎会触发Spark作业,所以速度较慢。
为了编写或附加表,可以使用以下方法

df.write.mode('append').saveAsTable(table_name)
q7solyqu

q7solyqu3#

我们在databricks中使用了以下方法来检查表是否存在,我想这应该可以。

tblList = sqlContext.tableNames(<your db name>)
for tbl in tblList:
  if tbl == <table_name>:
    print("Table exists")
  else:
    print("Table doesnot exist, create the table")

谢谢
尤瓦

bfrts1fy

bfrts1fy4#

结合两个答案中最好的一个:

tblList = sqlContext.tableNames("db_name")
if table_name in tblList:
    print("Table exists")
    # insert code to insert/append
else:
    print("Table does not Exist")
    # insert code to create

希望有帮助。
布伦特

6jjcrrmo

6jjcrrmo5#

另一个建议是避免创建类似列表的结构:

if (spark.sql("show tables in <DATABASE>")
         .filter(col("tableName") == "<TABLENAME>")
         .count() > 0):
    print('found')   
else:
    print('not found')
yhxst69z

yhxst69z6#

请尝试以下操作:

table_list=spark.sql("""show tables in your_db""")
table_name=table_list.filter(table_list.tableName=="your_table").collect()
if len(table_name)>0:
    print("table found")
else:
    print("table not found")

相关问题