我想读取包含 csv 文件的 zip 文件。我尝试了很多方法,但都没有成功。就我而言,我应该读取文件的路径在 Azure 存储资源管理器中。
例如,当我必须在 databricks 中读取 csv 时,我使用以下代码:
dfDemandaBilletesCmbinad = spark.read.csv("/mnt/data/myCSVfile.csv", header=True)
所以,我想要的 Azure 存储路径是 "/mnt/data/myZipFile.zip"
,里面有一些 csv 文件。
是否可以通过数据块中的 pySpark 读取 来自 Azure 存储的 csv 文件?
答案 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