почему я не могу удалить все файлы из контейнера Azure Blobstorage в блоках данных - PullRequest
0 голосов
/ 19 марта 2019

Я хочу удалить все файлы из контейнера 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

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

Я обнаружил, что команда

%fs rm -r /mnt/inbox/test

работает только в папке .не для файлов непосредственно в контейнере, поэтому в приведенном выше коде inbox - это контейнер, а test - это папка.тогда это работает.файлы должны находиться в папке .

0 голосов
/ 09 апреля 2019
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 (строка ['путь'], recurse = True): путь является заголовком df

0 голосов
/ 19 марта 2019

Как вы можете видеть в приведенном примере здесь , вы можете использовать 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)
...