【问题标题】:Sqlite disk I/O error (python - databricks)Sqlite 磁盘 I/O 错误(python - databricks)
【发布时间】:2021-02-25 12:07:55
【问题描述】:

所以,我正在 Databricks 上运行一个集群。当我尝试像这样查询一个 sqlite 文件时:

import sqlite3

conn = sqlite3.connect("/dbfs/FileStore/testing.sqlite")
cur = conn.cursor()
cur.execute('''SELECT * FROM ZACCELEROMETER''')

我收到此错误:

OperationalError                          Traceback (most recent call last)
<command-163> in <module>
----> 1 cur.execute('''SELECT * FROM ZACCELEROMETER''')

OperationalError: disk I/O error

值得一提的是,我可以在 Jupiter 本地查询这个确切的文件。另一件不寻常的事情是在数据块上,我试图打开我在互联网上找到的一个名为“Chinook_Sqlite.SQLite”的示例 SQLite 文件,它工作正常,没有错误,与第一个文件不同。 我认为这可能与第一个 SQLite 文件的编码有关。

任何建议将不胜感激! 如果有不清楚的地方请告诉我。

谢谢!

【问题讨论】:

  • 它在远程文件系统上吗?
  • @Shawn 我连接的是databricks DBFS (docs.databricks.com/data/databricks-file-system.html)。任何想法它适用于某些 sqlite 文件但与其他有磁盘 I/O 错误?
  • 我不知道什么是数据块,但从那个链接看,“分布式文件系统”?是的,这可能是问题所在。 Sqlite 并非设计用于网络文件系统,仅用于本地文件系统。您可以查看扩展错误代码以了解更具体的故障原因,但锁定尤其是其中的一个弱点。

标签: python sqlite databricks


【解决方案1】:

对于将来会遇到此问题的任何人,我找到了一个解决方案,我认为它适用于任何分布式文件系统。

conn = sqlite3.connect('data.sqlite')
curr = conn.execute('PRAGMA locking_mode = EXCLUSIVE')

只需运行第二行就可以了。我认为问题在于 sqlite 是要在本地运行(即由一台机器运行),所以在 NFS 上,将 sqlite 文件的锁定模式设置为独占将只允许一个用户在连接时访问 sqlite 文件仍然有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多