【问题标题】:Accessing file from python code in databricks从databricks中的python代码访问文件
【发布时间】:2021-03-01 05:08:47
【问题描述】:

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

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

【问题讨论】:

    标签: python pyspark databricks databricks-community-edition


    【解决方案1】:

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

    【讨论】:

    • 当你提到'file:///local-path'时,具体的例子是什么?会是“file:///C:/Users/User/Downloads”还是什么?感谢您的帮助。
    • 这里的本地路径是指集群驱动节点上的路径,如file:/tmp/my-test-file
    • 啊,我错误地认为 local 是在引用本地机器。你知道这是否可能吗?我没有遇到任何资源共享如何从数据块笔记本直接保存到桌面。
    • 没有办法做到这一点 - databricks 集群在云中的某个地方运行,通常在隔离环境中。例如,您可能可以将文件从 DBFS 上传到 S3,然后通过命令行或 UI 下载。另一种方法是将文件放入 DBFS 上的FileStore 并通过/files/ 链接下载(参见文档:docs.databricks.com/data/…),但我不确定它是否适用于社区版
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多