为什么我不能从databricks中的azure blobstorage容器中删除所有文件

时间:2019-03-19 10:44:02

标签: python databricks azure-databricks

我想使用以下方法从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

5 个答案:

答案 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 容器。