将文件写入 blob 容器时在根容器中创建空文件

Posted

技术标签:

【中文标题】将文件写入 blob 容器时在根容器中创建空文件【英文标题】:empty file creating in root container while writing file into a blob container 【发布时间】:2020-10-29 03:10:20 【问题描述】:

将数据从数据帧写入路径 路径 = rootcontainer/container1 + "/" + 文件名 df.repartition(1) 。写 .format("com.databricks.spark.csv") .option(“标题”,“真”) .option("分隔符", 分隔符) .option("报价", "\u0000") .mode(保存模式。覆盖) .save(路径)

执行上述命令时,除了在rootcontainer/container1/fileName中创建实际文件外,它还在rootcontainer/container1中创建空的blob文件(fileName)

我们如何避免在根文件夹中创建空 blob?

【问题讨论】:

【参考方案1】:

这在几个 Azure Blob 存储工具(AZCopy、数据工厂、一些 Spark 作业等)中经常发生。它源于这样一个事实,即目录/文件夹实际上并不存在于 Blob 存储中,而是命名约定的一部分。因此,其中一些工具会创建 0 字节工件作为其过程的一部分来表示这些路径。有些工具比其他工具在自己清理方面做得更好,但确实没有办法阻止它们的产生。操作完成后,您可以删除它们而不会产生任何后果。

这只是我的猜测,但可能有帮助的一件事是使用 Data Lake Storage 而不是传统的 Blob 存储。

【讨论】:

同样的问题在这里从 pyspark 中写入 parquet(也写入 csv)到 Azure Blob 存储的 databricks - 0 字节工件显示在 blob 容器中的“文件夹”旁边。我只是将 ADF 数据源更改为“文件夹”而不是空文件,并完美读取所有内容

以上是关于将文件写入 blob 容器时在根容器中创建空文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Azure 数据工厂使用 AppendFile 而不是 PutBlob 将文件写入 Blob 存储容器?

在 Azure Blob 容器中创建两个文件时,如何在 Azure 数据工厂中创建事件触发器?

无法在Azure blob存储$ root容器中创建文件夹

在nodejs中使用azure blob存储触发器在另一个容器中压缩和写入文件

如何将静态文件添加/上传到 Azure Blob 存储容器的特定路径

如何使用 blockblobservice 的 delete_blob 方法删除 azure 容器内的文件夹(blob)?