Какой более быстрый способ удаления файлов в BLOB-объекте Azure с помощью Spark? - PullRequest
1 голос
/ 01 июня 2019

Я использую Databricks / Spark в Azure. Я хочу удалить более 100 000 текстовых файлов, хранящихся в BLOB-объектах. Капля смонтирована. Мой код для удаления этих файлов в параллельном режиме с использованием Python (PySpark) выглядит следующим образом.

import os

# use dbutils to list all files
# very slow operation
text_files = ['/dbfs/mnt/myblob/myfolder/{}'.format(fi.name) for fi in dbutils.fs.ls('/dbfs/mnt/myblob/myfolder')]

# use spark context to parallelize list of text files
rdd = sc.parallelize(text_files)

# now delete files
# seems to be very slow as well when spark job kicks off
rdd.map(lambda p: os.remove(p)).count()

Обратите внимание, что я использую dbutils для вывода списка файлов в смонтированном каталоге. Эта операция медленная. Также обратите внимание, что я использую Python os.remove(...) для удаления файла, и эта операция также кажется медленной.

Какие-нибудь советы по более быстрому способу удаления файлов в BLOB-объекте Azure в контексте Spark / Databricks?

Есть также похожие посты здесь и здесь . Тем не менее, первый не определяет контекст / среду (ссылочные ссылки предназначены для Scala, и эти методы не существуют в контексте Spark в PySpark), а второй хочет реализовать параллельное удаление, но не говорит, должно ли решение быть с Спарк.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Я понимаю, что не отвечаю прямо на ваш вопрос, но вижу, что вы используете Azure и, скорее всего, используете фабрику данных (или, возможно, это будет в будущем, когда вы будете организовывать / использовать ваши блоки данных) ...

Выможет пожелать рассмотреть действие по удалению фабрики данных, которое является довольно новым дополнением к фабрике данных v2: https://docs.microsoft.com/en-us/azure/data-factory/delete-activity

Имеет возможность распараллеливать удаления.

0 голосов
/ 03 июня 2019

В настоящее время вы читаете данные из распределенной файловой системы, затем импортируете их в драйвер python, экспортируете их в Spark и снова читаете их с помощью Python для выполнения удаления ...

Iдумаю, что вы можете просто удалить шаг spark, манипулировать списком в python и удалять файлы, используя dbutils напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...