无法在后续会话中读取持久化的 Spark 仓库数据库

Cannot read persisted spark warehouse databases on subsequent sessions

我正在尝试创建一个本地持久化的 spark 仓库数据库,该数据库将 present/loaded/accessible 供同一应用程序创建的未来 spark 会话使用。

我已经配置了 spark 会话 conf:

.config("spark.sql.warehouse.dir", "C:/path/to/my/long/lived/mock-hive")

当我创建数据库时,我看到创建了 mock-hive 文件夹,并且在我创建的两个不同的数据库下面有文件夹:db1.dbdb2.db

但是,尽管数据库已成功创建并随后在支持它们的 运行 中查询,但会话完成后这些文件夹为空。

在随后的 运行 中配置相同的 spark 会话,如果我 baseSparkSession.catalog.listDatabases().collect() 我只看到 default 数据库。我创建的两个没有持续到第二个spark session。

让这些本地持久数据库在后续执行中可供读取的技巧是什么?

我注意到 spark.sql.warehouse.dir *.db 文件夹在创建后是空的,这可能与它有关...

Spark 版本:3.0.1

原来 spark.sql.warehouse.dir 不是存储本地数据库数据的地方...它在 metastore_db 中存储的 derby 数据库中。要重新定位它,您需要更改系统参数:

System.setProperty("derby.system.home", derbyPath)

我什至不必设置 spark.sql.warehouse.dir,只需将 derbyPath 重新定位到所有 spark 会话使用的公共位置即可。

注意 - 您不需要指定 derbyPath 的“metastore_db”部分,它将自动附加到该位置。