1

我正在尝试通过在https://community.cloud.databricks.com/的笔记本中使用以下代码来访问我之前通过 CLI 复制的模型文件

with open("/dbfs/cat_encoder.joblib", "rb") as f:
    lb_category = joblib.load(f)

为此我得到

FileNotFoundError: [Errno 2] No such file or directory: '/dbfs/cat_encoder.joblib'

正如我所说的那样,我已经使用 CLI 复制了文件:

dbfs cp cat_encoder.joblib dbfs:/cat_encoder.joblib

然后做

databricks fs ls "dbfs:/"

我看到了我复制的文件。

但是,如果我要在我的笔记本中执行此操作:

os.chdir('/dbfs')
print(os.listdir('.'))

如果我使用的是 UI 或 CLI,我看到的是一个空目录,而不是我看到的文件夹和文件。

如果我要从笔记本中写入这个空目录,是的,这是可行的,我会在该目录中看到我刚刚编写的文件中的一个文件,问题是我想阅读我事先已经放在那里的内容。

看起来本地 api 无法看到众所周知的另一只手对我通过 CLI 或 UI 加载的所有数据集和模型所做的事情。那么为什么我看不到这些文件呢?它是否与凭据有关,如果是,我该如何解决?或者可能是完全不同的东西,比如安装?我正在自己做一个介绍性试验和一些基本的东西来学习数据块,所以我对底层概念不太熟悉。

4

2 回答 2

0

我在下游发现了 3 个问题,但现在它对我有用。我试图解决的问题是保存一个 Spark-nlp 的 ClassifierDL 模型,而我在这个模型上得到的帮助同时为我解决了许多问题。

在 databricks 中,我创建了一个新集群,并在 spark 配置部分添加了以下 2 行:

spark.kryoserializer.buffer.max 1000M
spark.serializer org.apache.spark.serializer.KryoSerializer

启动客户端后,我可以使用上面代码中的“/dbfs/cat_encoder.joblib”进行本地读取。

于 2020-11-19T00:50:49.437 回答
0

这是社区版上 Databricks Runtime 7.x 中的行为更改(并且仅存在于此) - 这些dbfs:/文件不再通过/dbfs/.... 如果您想在本地访问该 DBFS 文件,那么您可以使用dbutils.fs.cp('dbfs:/file', 'file:/local-path')(或%fs cp ...)将文件从 DBFS 复制到可以使用它的本地文件系统。

于 2020-11-22T09:19:27.110 回答