Как получить доступ к захваченным данным из концентратора событий в Azure Data Lake Storage Gen2, используя Python - PullRequest
0 голосов
/ 07 апреля 2020

Я использую строку_строки для доступа к Azure хранилищу озера данных Gen2, в котором большое количество файлов Avro было сохранено с помощью захвата концентраторов событий, в типичной структуре каталогов, содержащей папки с именами год / месяц / день / час / мин. Я использую пакет azure .storage.filedatalake.

Сначала я получаю клиент службы Data Lake, используя:

datalake_service_client = DataLakeServiceClient.from_connection_string(connection_string)

И затем я получаю файловые системы в озере:

file_systems = datalake_service_client.list_file_systems()
for file_system in file_systems:
    print(file_system.name)

В этом случае существует только одна файловая система, называемая "datalake1". На данный момент я хочу получить доступ ко всем файлам Avro, которые я ожидаю найти в них. Сначала я пытаюсь получить клиент файловой системы:

file_system_client = datalake_service_client.get_file_system_client ("datalake1")

, а затем с помощью метода get_paths:

file_system_client.get_paths()

Возвращает итератор (azure .core.paging.ItemPaged объект), но отсюда я не могу видеть папки и файлы. Я попытался с простым пониманием списка, таким как [x.name for x in file_system_client.get_paths()], но получил ошибку StorageErrorException: операция вернула недопустимый статус 'Указанный контейнер не существует.'

Любая идея о том, как получить доступ файлы Avro, следующие за этой процедурой?

РЕДАКТИРОВАТЬ: я использую azure -storage-file-datalake версии 12.0.0. Вот скриншот кода:

enter image description here

Спасибо

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

обновление:

Протестировано с вашим кодом:

enter image description here


оригинальный ответ:

После вызова метода get_paths() вы можете использовать свойство is_directory, чтобы определить, является ли он каталогом или файлом. Если это файл, то вы можете что-то с ним сделать.

Пример кода (в этом примере я просто распечатываю путь к файлу .avro. Пожалуйста, не стесняйтесь изменять код в соответствии с вашими потребностями) :

#other code
paths = file_system_client.get_paths()

for path in paths:
    #determine if it is a directory or a file
    if not path.is_directory:
        #here, just print out the file name.
        print(path.name + '\n')
        #you can do other operations here.

Результат теста:

enter image description here

0 голосов
/ 10 апреля 2020

Проблема была в строке подключения. Я попробовал еще раз, но взял его с блейда «Ключи доступа» на портале Azure, и теперь он работает нормально. Мне удалось правильно запустить get_paths () и многое другое. Предыдущая строка подключения была взята из Storage Explorer, что соответствует строке подключения, полученной из блейда «Shared access signature». Кредиты @ MartinJaffer-MSFT ( MSDN ).

...