Загрузить файл из Azure файлов в Azure Databricks - PullRequest
0 голосов
/ 27 января 2020

Ищите способ использования Azure files SDK для загрузки файлов в мое azure хранилище больших двоичных объектов

Я пробовал много вещей, используя функцию из этой страницы

Но ничего не получалось. Я не понимаю, почему

пример:

file_service = FileService(account_name='MYSECRETNAME', account_key='mySECRETkey')

generator = file_service.list_directories_and_files('MYSECRETNAME/test') #listing file in folder /test, working well
for file_or_dir in generator:
    print(file_or_dir.name)

file_service.get_file_to_path('MYSECRETNAME','test/tables/input/referentials/','test.xlsx','/dbfs/FileStore/test6.xlsx')

с test.xlsx = именем файла в моем azure файле

/ dbfs / FileStore / test6. xlsx => путь для загрузки файла в моей системе dbfs

У меня есть сообщение об ошибке:

Исключение = Указанное имя ресурса содержит недопустимые символы

Пытался изменить имя, но, похоже, не работает

edit: Я даже не уверен, что функция выполняет то, что я хочу. Каков наилучший способ загрузки файла из azure файлов?

1 Ответ

1 голос
/ 27 января 2020

По моему опыту, я думаю, что лучший способ загрузить файл из Azure Файлы - это напрямую прочитать файл через его URL с токеном sas.

Например, как показано на рисунках ниже, это файл с именем test.xlsx в моей общей папке test, которую я просмотрел с помощью Azure Storage Explorer, а затем сгенерировал ее URL с токеном sas.

Рис. 1. Щелкните правой кнопкой мыши файл и затем щелкните Get Shared Access Signature...

enter image description here

Рис 2. Необходимо выбрать опцию Read разрешение для непосредственного чтения содержимого файла.

enter image description here

Рис. 3. Скопируйте URL с токеном sas

enter image description here

Вот мой пример кода, вы можете запустите его с URL-адресом sas-токена вашего файла в Azure Databricks.

import pandas as pd

url_sas_token = 'https://<my account name>.file.core.windows.net/test/test.xlsx?st=2020-01-27T10%3A16%3A12Z&se=2020-01-28T10%3A16%3A12Z&sp=rl&sv=2018-03-28&sr=f&sig=XXXXXXXXXXXXXXXXX'
# Directly read the file content from its url with sas token to get a pandas dataframe
pdf = pd.read_excel(url_sas_token )
# Then, to convert the pandas dataframe to a PySpark dataframe in Azure Databricks
df = spark.createDataFrame(pdf)

Кроме того, можно использовать Azure File Storage SDK для создания URL-адреса с sas-токеном для вашего файла или для получения байты вашего файла для чтения, пожалуйста, обратитесь к официальному документу Develop for Azure Files with Python и моему образцу кода ниже.

# Create a client of Azure File Service as same as yours
from azure.storage.file import FileService

account_name = '<your account name>'
account_key = '<your account key>'
share_name = 'test'
directory_name = None
file_name = 'test.xlsx'

file_service = FileService(account_name=account_name, account_key=account_key)

To создать URL-адрес токена sas файла

from azure.storage.file import FilePermissions
from datetime import datetime, timedelta
sas_token = file_service.generate_file_shared_access_signature(share_name, directory_name, file_name, permission=FilePermissions.READ, expiry=datetime.utcnow() + timedelta(hours=1))

url_sas_token = f"https://{account_name}.file.core.windows.net/{share_name}/{file_name}?{sas_token}"
import pandas as pd
pdf = pd.read_excel(url_sas_token)
df = spark.createDataFrame(pdf)

или использовать функцию get_file_to_stream для чтения содержимого файла

from io import BytesIO
import pandas as pd

stream = BytesIO()
file_service.get_file_to_stream(share_name, directory_name, file_name, stream)
pdf = pd.read_excel(stream)
df = spark.createDataFrame(pdf)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...