如何解决无法在后续会话中读取持久化的 Spark 仓库数据库
我正在尝试创建一个本地持久化的 Spark 仓库数据库,该数据库将由同一应用程序创建的未来 Spark 会话呈现/加载/访问。
我已经配置了 spark session conf:
.config("spark.sql.warehouse.dir","C:/path/to/my/long/lived/mock-hive")
当我创建数据库时,我看到创建了 mock-hive 文件夹,并且在我创建的两个不同的数据库下面有文件夹:db1.db
和 db2.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 会话都使用的公共位置。
注意 - 您不需要指定路径的“metastore_db”部分,它将自动附加到位置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。