我正在尝试检查配置单元metastore中是否存在表,如果没有,请创建该表。如果该表存在,请追加数据。
我有以下代码段:
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
我无法解决值错误,因为在配置单元metastore中创建的其他数据库表遇到相同的错误。还有另一种方法来检查配置单元metastore中是否存在表?
答案 0 :(得分:4)
您可以为此使用JVM对象。
if spark._jsparkSession.catalog().tableExists('db_name', 'tableName'):
print("exist")
else:
print("Not Exist")
用于Python功能的Py4j套接字。其他操作使用JVM SparkContext
。
在Spark Scala中,您可以直接访问。
spark.catalog.tableExists("dbName.tableName")
答案 1 :(得分:2)
结合以下两个最佳答案:
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
希望有帮助。
布伦特
答案 2 :(得分:1)
尝试以下:
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")
答案 3 :(得分:0)
我们在数据块中使用了以下内容来检查表是否存在,我猜这应该可以工作。
**a=Quiz.objects.all()
print(a[0].assignment_set.all())**
谢谢
Yuva
答案 4 :(得分:0)
避免创建类似列表的结构的另一个建议:
if (spark.sql("show tables in <DATABASE>")
.filter(col("tableName") == "<TABLENAME>")
.count() > 0):
print('found')
else:
print('not found')
答案 5 :(得分:0)
在pyspark 2.4.0 中,您可以使用两种方法之一来检查表是否存在。请记住,Spark会话(spark
)已创建。
table_name = 'table_name'
db_name = None
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
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
我会使用第一种方法,因为第二种方法似乎会触发火花作业,因此速度较慢。
为了编写或追加表,您可以使用以下方法
df.write.mode('append').saveAsTable(table_name)