我想使用以下方法从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
答案 0 :(得分:0)
在示例here中可以看到,您可以在单个文件方法中使用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)
答案 1 :(得分:0)
我发现命令
%fs rm -r /mnt/inbox/test
仅适用于文件夹。而不是直接放在容器中的文件上,因此在上面的代码中, 收件箱是容器, test 是文件夹。然后它起作用。文件必须位于文件夹中。
答案 2 :(得分:0)
path = ["dbfs:/_/", "dbfs:/_/_"]
for url in path
files = dbutils.fs.ls(url)
filepathDF = sqlContext.createDataFrame(map(lambda p: Row(path=p[0]), files))
for row in filepathDF.rdd.collect():
dbutils.fs.rm(row['path'], recurse=True)
注意:-dbutils.fs.rm(row ['path'],recurse = True):path是df的标头
答案 3 :(得分:0)
以下为我工作。它列出了dbfs文件夹中的所有文件,并将其删除。
for filepath in dbutils.fs.ls('/mnt/FOLDERNAME'):
file = str(filepath).split('\'')[1]
dbutils.fs.rm(file, True)
如果要将删除限制为任何扩展名(以下示例中为csv)。
for filepath in dbutils.fs.ls('/mnt/FOLDERNAME'):
file = str(filepath).split('\'')[1]
if '.csv' in file:
dbutils.fs.rm(file, True)
答案 4 :(得分:0)
我发现了同样的问题。
%fs rm -r path
要么
dbutils.fs.rm('path', True)
检查 path
是否指向“容器”而不是“文件夹”。
我们无法从数据块中删除 azure blob 容器。