我刚刚运行了这个:
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 Databricks 中,这是预期行为。
- 对于文件,它显示实际文件大小。
- 对于目录,它显示 size=0
示例: 在 dbfs:/FileStore/中,我有三个以白色显示的文件和三个以 azure 显示的文件夹。使用 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 系统调用sync。
有多种方法可以解决此问题。您可以查看类似的SO我回答的主题。
希望这有帮助。
关于azure - Databricks 文件存储 = 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58243460/