【问题标题】:Databricks not saving dataframes as Parquet properly in the blob storageDatabricks 未在 blob 存储中将数据帧正确保存为 Parquet
【发布时间】:2023-01-20 16:00:27
【问题描述】:

我正在使用带有已安装 blob 存储的 Databricks。当我执行创建大型 pandas DataFrame 的 Python notebook 并尝试将它们存储为 .parquet 文件时,它们显示为 0 字节。

保存发生在我导入的子模块中,而不是在主笔记本本身中。奇怪的是,将数据帧保存为镶木地板文件总是将其存储为空文件,即 0 字节。但是,如果我尝试在主笔记本本身中将数据框另存为 .parquet 文件,它就可以工作。

问题好像和这个问题很像:https://community.databricks.com/s/question/0D58Y00009MIWkfSAH/how-can-i-save-a-parquet-file-using-pandas-with-a-data-factory-orchestrated-notebook

我已经安装了 pyarrow 和 pandas 并尝试按如下方式保存数据框:

df.to_parquet("blob storage location.parquet", index=False, engine="pyarrow")

在本地一切正常,但在 Databricks 中运行它会导致问题。我首先尝试将我的数据帧保存为 HDF5 文件,但保存过程似乎在 Databricks 中不起作用。然后我切换到 Parquet,但我遇到了下面提到的问题。

有没有人有解决方案或解释为什么会这样?

【问题讨论】:

    标签: python azure blob databricks parquet


    【解决方案1】:

    我试图在我的环境中重现相同的结果,但得到了以下结果:

    这是我的示例挂载位置路径/mnt/io243

    dbutils.fs.mount(
        source = "wasbs://<container_Name>@<storage_account_name>.blob.core.windows.net/",
        mount_point = "/mnt/<mount_name>",
        extra_configs = {"fs.azure.account.key.<storage_account_name>.blob.core.windows.net":"Access_key"})
    

    注意:如您所见,这是我的挂载路径/mnt/io243。如果我使用 没有添加/dbfs的相同挂载路径存储为空文件。 所以像这样使用挂载路径句法 :/dbfs/mnt/io243/&lt;file_name&gt;.parquet .确保安装 fsspec 使用此命令%pip install fsspec

    我使用以下代码成功地将文件放入目标位置。

    from pyspark.sql.types import StructType,StructField, StringType, IntegerType
    
    import pandas as pd
    #%pip install fsspec
    
    #sample datafram
    my_data = [
                ("vamsi","1","M",2000),
                ("saideep","2","M",3000),
                ("rakesh","3","M",4000)
              ]
    
    schema = StructType([ 
        StructField("firstname",StringType(),True), 
        StructField("id", StringType(), True), 
        StructField("gender", StringType(), True), 
        StructField("salary", IntegerType(), True) 
      ])
    
    df = spark.createDataFrame(data=my_data,schema=schema)
    
    df1 = df.toPandas()
    
    df1.to_parquet("/dbfs/mnt/io243/def1.parquet",index=False, engine="pyarrow")
    

    是的,您可以检查是否存储了内部安装位置文件。请遵循此代码。

    dbutils.fs.ls('<mount_path>')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-07
      • 2020-03-24
      • 2020-05-28
      • 2020-05-28
      • 2011-07-23
      • 2020-11-15
      • 2021-07-11
      • 2020-01-27
      相关资源
      最近更新 更多