【问题标题】:Databricks Filestore = 0Databricks 文件存储 = 0
【发布时间】:2019-10-04 21:41:44
【问题描述】:

我刚刚运行了这个:

dbutils.fs.ls("dbfs:/FileStore/")

我看到了这个结果:

[FileInfo(path='dbfs:/FileStore/import-stage/', name='import-stage/', size=0),
 FileInfo(path='dbfs:/FileStore/jars/', name='jars/', size=0),
 FileInfo(path='dbfs:/FileStore/job-jars/', name='job-jars/', size=0),
 FileInfo(path='dbfs:/FileStore/plots/', name='plots/', size=0),
 FileInfo(path='dbfs:/FileStore/tables/', name='tables/', size=0)]

文件存储中不应该有一些东西吗?我在一个湖中有数百 GB 的数据。我在让 Databricks 找到这些文件时遇到各种问题。当我使用 Azure 数据工厂时,一切正常。它开始让我发疯了!

例如,当我运行这个时:

dbutils.fs.ls("/mnt/rawdata/2019/06/28/parent/")

我收到这条消息:

java.io.FileNotFoundException: File/6199764716474501/mnt/rawdata/2019/06/28/parent does not exist.

我的湖中有数万个文件!我不明白为什么我不能得到这些文件的列表!!

【问题讨论】:

    标签: azure azure-data-lake azure-data-factory-2 azure-databricks


    【解决方案1】:

    在 Azure Databricks 中,这是预期行为。

    • 对于文件,它显示实际文件大小。
    • 对于目录,它显示 size=0

    示例: 在 dbfs:/FileStore/ 我有三个以白色显示的文件和三个以蓝色显示的文件夹。使用 databricks cli 检查文件大小。

    dbfs ls -l dbfs:/FileStore/
    

    使用dbutils查看结果时如下:

    dbutils.fs.ls("dbfs:/FileStore/")
    

    读取大于 2GB 的文件时要记住的重要一点:

    • 仅支持小于 2GB 的文件。如果您使用本地文件 I/O API 读取或写入大于 2GB 的文件,您可能会看到损坏的文件。相反,请使用 DBFS CLI、dbutils.fs 或 Spark API 访问大于 2GB 的文件,或者使用本地文件 API 中描述的 /dbfs/ml 文件夹进行深度学习。
    • 如果您使用本地文件 I/O API 写入文件,然后立即尝试使用 DBFS CLI、dbutils.fs 或 Spark API 访问它,您可能会遇到 FileNotFoundException,即大小为 0 的文件,或过时的文件内容。这是意料之中的,因为操作系统默认缓存写入。要强制将这些写入刷新到持久存储(在我们的例子中为 DBFS),请使用标准的 Unix 系统调用同步。

    有多种方法可以解决此问题。您可以查看我回答的类似SO 线程。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 2020-07-05
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多