Pyspark: загрузка zip-файла из хранилища BLOB-объектов - PullRequest
0 голосов
/ 21 апреля 2020

Я использую Pyspark, чтобы попытаться прочитать zip-файл из хранилища BLOB-объектов. Я хочу разархивировать файл после загрузки, а затем записать разархивированные файлы CSV обратно в хранилище BLOB-объектов.

Я следую этому руководству, которое объясняет, как разархивировать файл после прочтения: https://docs.databricks.com/_static/notebooks/zip-files-python.html

Но это не объясняет, как я читаю почтовый индекс из BLOB-объекта , У меня есть следующий код

file_location = "path_to_my.zip"
df = sqlContext.read.format("file_location").load

Я ожидал, что это загрузит zip в кирпичи данных как df, и оттуда я мог последовать совету из статьи, чтобы разархивировать, загрузить csvs в фрейм данных и затем записать кадры данных обратно в blob.

Есть какие-нибудь идеи о том, как изначально прочитать zip-файл из BLOB-объекта с помощью pyspark?

Спасибо,

1 Ответ

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

Как показано в первой ячейке вашей записной книжки DataBricks, вам необходимо скачать zip-файл и каким-то образом распаковать его. Ваш случай отличается, потому что вы используете Azure хранилище BLOB-объектов и хотите сделать все в Python (без других приложений оболочки).

Эта страница описывает процесс доступа к файлам в Azure хранилище BLOB-объектов. Необходимо выполнить следующие действия:

  1. Установить пакет azure-storage-blob.
  2. Импортировать модули SDK и установить необходимые учетные данные ( ссылка ).
  3. Создать экземпляр BlobServiceClient, используя строку подключения:
# Create the BlobServiceClient object which will be used to create a container client
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
Создайте экземпляр BlobClient для файла, который вы хотите:
blob_client = blob_service_client.get_blob_client(container="container", blob="path_to_my.zip")
Загрузите BLOB-объект (zip-файл) и разархивируйте его с помощью gzip. Я бы написал что-то вроде этого:
from pathlib import Path
import gzip

Path("./my/local/filepath.csv").write_bytes(
    gzip.decompress(blob_client.download_blob().readall())
)
Используйте "./my/local/filepath.csv" для создания DataFrame.
...