【问题标题】:Read a zip file in databricks from Azure Storage Explorer从 Azure 存储资源管理器读取数据块中的 zip 文件
【发布时间】:2021-07-27 01:05:46
【问题描述】:

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

例如,当我必须读取数据块中的 csv 时,我使用以下代码:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我认为唯一的方法是使用 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)
    

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

    【讨论】:

      【解决方案2】:

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

      在您的场景中,您的 Azure 存储帐户似乎已安装到 Databricks DBFS 文件路径。由于已挂载,您可以使用 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

      【讨论】:

        猜你喜欢
        • 2021-09-06
        • 2016-02-22
        • 2019-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多