pyspark 意外删除Spark中的derby.log和metastore_db文件夹,现在表无法保存

wgx48brx  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(142)

目前,我正在做一个练习,要求在PySpark中创建一个数据库和表,并使用它们。问题是我之前创建了一个数据库,所以我决定在开始一个新的数据库之前删除所有相关的东西(spark-warehouse foldermetastore_db folderderby.log file)。
现在,当我第一次用下面的代码创建一个新数据库和新表时,它工作得很好。

spark.sql("CREATE DATABASE IF NOT EXISTS asm1_db")
spark.sql("USE asm1_db")

dfQ1.write.bucketBy(2, "Id").mode("overwrite").saveAsTable("asm1_db.tableQ1")
dfA1.write.bucketBy(2, "ParentId").mode("overwrite").saveAsTable("asm1_db.tableA1")

但是表和数据库不会保存.例如下面的代码:

spark.sql("USE asm1_db") => Can't find the database

我必须重新创建数据库,即使这样,表也不会保存

spark.sql("CREATE DATABASE IF NOT EXISTS asm1_db")
spark.sql("USE asm1_db")
spark.sql("select Id from tableq1").show() => Can't find the table tableq1

当我检查Pycharm上的文件夹结构时,spark-warehouse folder和所有db/表仍然存在x1c 0d1x
我必须再次运行整个将数据写入表的过程,但数据非常大,所以我不想每次都运行该过程。我知道saveAsTable方法创建的是永久表,而不是临时表
我想问题是因为我之前删除了metastore_db folderderby.log file。那么有什么办法可以恢复它们呢?我想每次我创建一个新的数据库时它都会重新创建。

idfiyjo8

idfiyjo81#

在SparkSession创建代码中转出。你必须添加.enableHiveSupport()。

spark = SparkSession \
    .builder \
    .master("local[*]") \
    .appName("SparkSQLTableDemo") \
    .enableHiveSupport() \
    .getOrCreate()

相关问题