首页 > 解决方案 > 从databricks中的python代码访问文件

问题描述

我正在尝试通过在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 加载的所有数据集和模型所做的事情。那么为什么我看不到这些文件呢?它是否与凭据有关,如果是,我该如何解决?或者可能是完全不同的东西,比如安装?我正在自己做一个介绍性试验和一些基本的东西来学习数据块,所以我对底层概念不太熟悉。

标签: pythonpysparkdatabricksdatabricks-community-edition

解决方案


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

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

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

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


推荐阅读