Прочитайте zip-файл в каталогах данных из проводника хранилища Azure

#pyspark #azure-storage #unzip #zipfile #azure-databricks

Вопрос:

Я хочу прочитать zip-файлы, содержащие csv-файлы. Я перепробовал много способов, но мне это не удалось. В моем случае путь, по которому я должен прочитать файл, находится в проводнике хранилища Azure.

Например, когда мне нужно прочитать csv в базах данных, я использую следующий код:

 dfDemandaBilletesCmbinad = spark.read.csv("/mnt/data/myCSVfile.csv", header=True)
 

Итак, мне нужен путь к хранилищу Azure "/mnt/data/myZipFile.zip" , внутри которого у меня есть несколько csv-файлов.

Можно ли читать csv-файлы, поступающие из хранилища Azure, через PySpark в блоках данных?

Ответ №1:

Я думаю, что единственный способ сделать это-использовать Pandas, библиотеку openpyxl и zip для python, так как для PySpark нет подобной библиотеки.

 import pandas as pd
import openpyxl, zipfile

#Unzip and extract in file. Maybe, could be better to unzip in memory with StringIO.
with zipfile.ZipFile('/dbfs/mnt/data/file.zip', 'r') as zip_ref:
    zip_ref.extractall('/dbfs/mnt/data/unzipped')

#read excel
my_excel = openpyxl.load_workbook('/dbfs/mnt/data/unzipped/file.xlsx') 
ws = my_excel['worksheet1']

# create pandas dataframe
df = pd.DataFrame(ws.values)

# create spark dataframe
spark_df = spark.createDataFrame(df)
 

Проблема в том, что это выполняется только в виртуальной машине драйвера кластера.

Ответ №2:

Пожалуйста, имейте в виду, что обозреватель хранилища Azure не хранит никаких данных. Это инструмент, который позволяет вам получить доступ к вашей учетной записи хранилища Azure с любого устройства и на любой платформе. Данные всегда хранятся в учетной записи хранилища Azure.

В вашем сценарии создается впечатление, что ваша учетная запись хранилища Azure уже подключена к пути к файлу DBFS Databricks. Поскольку он смонтирован, вы можете использовать команду spark.read для доступа к файлу непосредственно из учетной записи хранилища Azure

Пример df = spark.read.text(«dbfs:/mymount/my_file.txt»)

Ссылка: https://docs.databricks.com/data/databricks-file-system.html

и что касается ZIP-файла, пожалуйста, обратитесь

https://docs.microsoft.com/en-us/azure/databricks/_static/notebooks/zip-files-python.html