Databricks Filestore = 0

问题描述 投票:0回答:1

我刚刚运行了这个:

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个回答
0
投票

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

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

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

dbfs ls -l dbfs:/FileStore/

enter image description here

当您使用dbutils签出结果时,如下所示:

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

enter image description here

读取大于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系统调用sync。

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

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.