无法在 databricks 运行时版本 7 中使用 shell 命令访问 /dbfs/FileStore

Posted

技术标签:

【中文标题】无法在 databricks 运行时版本 7 中使用 shell 命令访问 /dbfs/FileStore【英文标题】:Can't Access /dbfs/FileStore using shell commands in databricks runtime version 7 【发布时间】:2020-08-27 02:41:07 【问题描述】:

在 databricks 运行时版本 6.6 中,我能够成功运行如下 shell 命令:

%sh ls /dbfs/FileStore/tables

但是,在运行时版本 7 中,这不再有效。有什么方法可以在运行时版本 7 中直接访问 /dbfs/FileStore?我需要运行命令来解压缩 /dbfs/FileStore/tables 中的 parquet zip 文件。这曾经在 6.6 版中有效,但 databricks 新的“升级”打破了这个简单的核心功能。

不确定这是否重要,但我正在使用社区版的数据块。

【问题讨论】:

它说的错误是什么? 【参考方案1】:

当您运行 %sh ls /dbfs/FileStore/tables 时,您无法在 databricks 运行时版本 7 中使用 shell 命令访问 /dbfs/FileStore,因为默认情况下,文件夹名为 '/dbfs/FileStore' does not exists in the 'dbfs'

尝试在“/dbfs/FileStore/Tables”中上传一些文件。

现在,再次尝试运行相同的命令%sh ls /dbfs/FileStore/tables,现在您会看到结果,因为我们已将数据上传到/dbfs/FileStore/tables 文件夹中。

【讨论】:

如果我的回答对你有帮助,可以accept it as an answer。这对其他社区成员可能是有益的。谢谢。 这是不正确的答案,因为它不是在不同于 Azure Databricks 的社区版上完成的【参考方案2】:

/dbfs 装载不适用于 DBR >= 7.x 的社区版 - 这是一个已知限制。

您可以通过使用驱动程序节点上的文件并使用dbutils.fs.cp 命令 (docs) 上传或下载文件来解决此限制。因此您的代码将如下所示:

#write a file to local filesystem using Python I/O APIs
...
# upload file to DBFS
dbutils.fs.cp('file:/tmp/local-path', 'dbfs:/FileStore/tables/dbfs_file.txt')

从 DBFS 读取数据将如下所示:

# copy file from DBFS to local file_system
dbutils.fs.cp('dbfs:/tmp/dbfs_file.txt', 'file:/tmp/local-path')
# read the file locally
...

【讨论】:

【参考方案3】:

我知道这个问题已经有一年的历史了,但我想分享其他我认为有帮助的帖子,以防有人有同样的问题。

我发现这个类似问题中的 cmets 很有帮助:How to access DBFS from shell?。上述帖子中的 cmets 还引用了 Not able to cat dbfs file in databricks community edition cluster. FileNotFoundError: [Errno 2] No such file or directory:,我发现这也很有帮助。

我在社区版中了解到ls /dbfs/FileStore/tables 是不可能的,因为 dbfs 本身没有安装在节点上并且该功能被禁用。

【讨论】:

以上是关于无法在 databricks 运行时版本 7 中使用 shell 命令访问 /dbfs/FileStore的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure 中检查 Databricks 运行时的版本

databricks-connect 无法连接到 Databricks 集群运行时 8.4

Azure Databricks:此群集的运行时版本不支持

为啥 Databricks Connect 测试无法在 Mac 上运行?

popToRootViewControllerAnimated 在 IOS 7 sim 上的 Xcode5 中使 App 崩溃

Databricks 中的 Spark 版本