В блоке данных перечислены все большие двоичные объекты в хранилище BLOB-объектов Azure. - PullRequest
2 голосов
/ 07 марта 2019

Я подключил учетную запись хранилища BLOB-объектов к Databricks и могу получить к ней доступ, поэтому я знаю, что она работает.

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

list = dbutils.fs.ls('dbfs:/mnt/myName/Path/To/Files/2019/03/01')
df = spark.createDataFrame(list).select('name')

Проблема, с которой я столкнулся, заключается в том, что она исключительно медленная ... из-за того, что в этом месте находится около 160 000 BLOB-объектов (проводник хранилища показывает это как ~ 1016106592 байта, что составляет 1 ГБ!)

Это, конечно, не может сбрасывать все эти данные, все, что мне нужно / нужно, это имя файла ..

Является ли хранилище больших двоичных объектов моей бутылочной горлышкой, или я (каким-то образом) могу получить блоки данных для параллельного выполнения команды?

Спасибо.

1 Ответ

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

Согласно моему опыту и исходя из моего понимания хранилища BLOB-объектов Azure, все операции в SDK или других операциях в хранилище BLOB-объектов Azure будут преобразованы в вызовы API REST.Таким образом, ваш dbutils.fs.ls вызов фактически вызывает связанный REST API List Blobs в контейнере BLOB-объектов.

Поэтому я уверен, что производительность вашего кода действительно зависит от передачи данных о размере размера тела ответа XML из списка больших двоичных объектов в хранилище больших двоичных объектов для извлечения имен больших двоичных объектов в listпеременная, даже если существует около 160 000 больших двоичных объектов.

Между тем все имена больших двоичных объектов будут заключены во множество фрагментов XML-ответа, и для каждого фрагмента будет установлено ограничение MaxResults, и получение следующего фрагмента зависит отNextMarker значение предыдущего среза.Вышеуказанная причина заключается в том, что перечислять большие двоичные объекты медленно, и это не может быть параллелизмом.

Мое предложение по повышению эффективности загрузки списка больших двоичных объектов заключается в том, чтобы заранее кэшировать результаты больших двоичных объектов, например генерировать большой двоичный объект.написать список блобов построчно.Учитывая обновление в реальном времени, вы можете попробовать использовать Функция Azure с Blob Trigger , чтобы добавить запись имени BLOB-объекта в Добавить BLOB-объект при возникновении события создания BLOB-объекта.

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