首页 > 解决方案 > 为什么我不能从 databricks 中的 azure blobstorage 容器中删除所有文件

问题描述

我想使用以下命令从 blobstorage 容器中删除所有文件:

dbutils.fs.rm

像这样指向一个特定文件可以正常工作:

dbutils.fs.rm("/mnt/inbox/InvLog.txt", True)

但我想删除容器的所有内容。我尝试了以下方法但没有成功:

dbutils.fs.rm("/mnt/inbox/*.txt", True)
dbutils.fs.rm("/mnt/inbox/", True)
dbutils.fs.rm("/mnt/inbox", True)
dbutils.fs.rm("/mnt/inbox/*.*", True)

有什么建议么?

更新:尝试了 ZF007 建议 %fs rm -r mnt/inbox 但它抛出错误:

java.lang.NullPointerException

标签: pythondatabricksazure-databricks

解决方案


正如您在此处给出的示例中看到的,您可以dbutils.fs.rm("/mnt/inbox/InvLog.txt", True)在单个文件方法中使用。

网页上的示例为您提供了以下单个文件:

dbutils.fs.rm("/foobar/baz.txt")

删除文件夹 foobar 下的文件是这样完成的:

 %fs rm -r foobar

在你的情况下使用:

%fs rm -r mnt/inbox

请记住 linux、Windows 和 OSX 系统之间的文件夹注释差异。

更新:

您可以尝试以下非优雅的捷径解决方案来规避您声明的 java 异常:

import os
import ...snippet... # yours to fill in here what else you need to import.

files_processed = 0
files_path = [os.path.abspath(x) for x in os.listdir()]

print (files_path) # your filepath might need cleaning for it can be accepted. It prints here all found files.

for item in files_path:
    if os.path.isfile(item) == True:
        dbutils.fs.rm(item, True)
        files_processed +=1
    else:
        print ('skipped folder: %s', item)

print ("job done", ' : ', file_processed)

推荐阅读