从 Azure 存储资源管理器读取数据块中的 zip 文件

时间:2021-05-04 16:51:31

标签: pyspark azure-storage unzip zipfile azure-databricks

我想读取包含 csv 文件的 zip 文件。我尝试了很多方法,但都没有成功。就我而言,我应该读取文件的路径在 Azure 存储资源管理器中。

例如,当我必须在 databricks 中读取 csv 时,我使用以下代码:

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

所以,我想要的 Azure 存储路径是 "/mnt/data/myZipFile.zip" ,里面有一些 csv 文件。

是否可以通过数据块中的 pySpark 读取 来自 Azure 存储的 csv 文件

2 个答案:

答案 0 :(得分:0)

我认为唯一的方法是使用 Pandas、openpyxl 和 Python 的 zip 库,因为 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)

问题是这只在集群的驱动虚拟机中执行。

答案 1 :(得分:0)

请记住,Azure 存储资源管理器不存储任何数据。它是一种工具,可让您从任何设备和任何平台访问您的 Azure 存储帐户。数据始终存储在 Azure 存储帐户中。

在您的方案中,您的 Azure 存储帐户似乎已装载到 Databricks DBFS 文件路径。既然是挂载的,就可以直接从 Azure 存储账户使用 spark.read 命令访问文件

示例 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

相关问题