azure - Databricks 文件存储 = 0

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

我刚刚运行了这个:

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/

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我回答的主题。

希望这有帮助。

关于azure - Databricks 文件存储 = 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58243460/

相关文章:

sql - 从重复值中获取最新值

azure - 如何在Azure云上部署Spring Cloud微服务

azure - Azure Data Lakes (Hadoop) 中的优先级和并行度值意味着什么?

Azure Data Lake 存储和数据工厂 - 临时 GUID 文件夹和文件

dataset - 如何在 ADFv2 中以表达式作为值传递参数?

runtime-error - 通过 Synapse Pipelines 执行 Azure Synapse Notebook 时访问 Key Vault 时出错

.net - Azure函数: Singleton for expensive object

azure - 使用 lucene 模糊搜索和 Azure 搜索的同义词

azure - U-SQL 表与 SQL 数据仓库

azure - 将数据从 Excel 文件加载到 Azure 数据仓库