解压缩存储在 Azure Databricks FileStore 中的文件夹

cin*_*n21 5 azure apache-spark databricks

我已将 *.zip 文件夹上传到我的 Azure Datacricks FileStore:

在此处输入图片说明

现在我想解压缩文件夹并将其存储在 FileStore 上:dbfs:/FileStore/tables/rfc_model。

我知道这应该很容易,但我在 DB Notebooks 中工作时感到困惑......

谢谢你的帮助!

更新:

我使用这个公式没有成功:

%sh unzip /FileStore/tables/rfc_model.zip

%sh unzip dbfs:/FileStore/tables/rfc_model.zip

更新:

我已将@Sim 创建的代码复制到我的 Databricks 笔记本中,但出现此错误:

在此处输入图片说明

知道如何解决这个问题吗?

Sim*_*Sim 8

当您使用时,%sh您正在使用其本地文件系统在驱动程序节点上执行 shell 命令。但是,/FileStore/不在本地文件系统中,这就是您遇到问题的原因。您可以通过尝试看到:

%sh ls /FileStore
# ls: cannot access '/FileStore': No such file or directory
Run Code Online (Sandbox Code Playgroud)

对比

dbutils.fs.ls("/FileStore")
// resX: Seq[com.databricks.backend.daemon.dbutils.FileInfo] = WrappedArray(...)
Run Code Online (Sandbox Code Playgroud)

您必须使用可以与 Databricks 文件系统一起使用的解压缩实用程序,或者您必须将 zip 从文件存储复制到驱动程序磁盘,解压缩然后复制回/FileStore.

您可以使用file:/...,例如,寻址本地文件系统,

dbutils.fs.cp("/FileStore/file.zip", "file:/tmp/file.zip")
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

旁注 1:Databricks 文件系统管理不是超级直观,尤其是在文件存储方面。例如,理论上,Databricks 文件系统 (DBFS) 在本地安装为/dbfs/. 但是,/dbfs/FileStore没有解决文件存储,而dbfs:/FileStore有。你不是一个人。:)

旁注 2:如果您需要对许多文件执行此操作,您可以通过Dataset[String]使用文件路径而不是ds.map { name => ... }.collect(). collect 动作将强制执行。在 map 函数的主体中,您将不得不使用 shell API 而不是%sh.

旁注 3:不久前,我使用以下 Scala 实用程序在 Databricks 上解压缩。无法验证它仍然有效,但它可以给你一些想法。

%sh ls /FileStore
# ls: cannot access '/FileStore': No such file or directory
Run Code Online (Sandbox Code Playgroud)


nes*_*.gp 7

这有效:

%sh
unzip /dbfs/FileStore/tables/rfc_model.zip
Run Code Online (Sandbox Code Playgroud)

如果需要,需要将结果复制到 dbfs 中的目标。

%sh
cp rfc_model /dbfs/FileStore/tables
Run Code Online (Sandbox Code Playgroud)