PySpark 无法在 Blob 存储中找到现有文件

问题描述 投票:0回答:1

我想使用以下代码打开位于 ADSL2 中的 Azure Databricks 中的 Excel 文件:

#%pip install openpyxl pandas
import pandas as pd
display(dbutils.fs.ls("/mnt/myMnt"))
path = "/mnt/myMnt/20241007112914_Statistik_789760_0000_327086871111430.xlsx"
df_xl = pd.read_excel(path, engine="openpyxl")

第三行返回 ADSL 中我的 Excel 文件的列表,正如预期的那样。所以这些文件存在并且可以访问。

但是最后一行会导致此错误:

FileNotFoundError: [Errno 2] No such file or directory: '/mnt/MyMnt/20241007112914_Statistik_789760_0000_327086871111430.xlsx'

Pandas 是否无法访问 Blob 存储,我必须先将文件移动到 DBFS 中?如果是的话,怎么办?

python databricks azure-databricks pyspark-pandas
1个回答
0
投票

Pandas 的 read_excel 函数无法通过 Databricks 文件系统 (DBFS) 挂载点 /mnt/myMnt 直接访问存储在 Azure Data Lake Storage Gen2 (ADLS2) 中的文件。

Pandas 在本地文件系统上运行,因此,您需要以 Pandas 可以访问的方式引用该文件。

在 Databricks 中, /dbfs/ 目录提供 DBFS 挂载点的本地文件系统视图,它允许您使用 Pandas 等库可以识别的标准文件系统路径访问存储在 DBFS 中的文件。

/dbfs/ 目录是到 DBFS 根的本地映射。这允许任何本地进程(如 Pandas)访问 DBFS 文件,就像它们位于本地文件系统上一样。

您可以使用如下所示的内容。该方法将文件复制到驱动节点的/tmp/目录下。

#%pip install openpyxl pandas

import pandas as pd

display(dbutils.fs.ls("/mnt/myMnt"))

path = "/dbfs/mnt/myMnt/20241007112914_Statistik_789760_0000_327086871111430.xlsx"

df_xl = pd.read_excel(path, engine="openpyxl")

display(df_xl)

或者

您可以使用Databricks的内置函数,例如spark.read.format(“com.crealytics.spark.excel”),它本身就理解DBFS路径。

df_spark = (spark.read.format("com.crealytics.spark.excel")
    .option("header", "true")         
    .option("inferSchema", "true")    
    .option("dataAddress", "'Sheet1'!A1:F10") 
    .option("treatEmptyValuesAsNulls", "true")
    .load("/mnt/myMnt/my_excel.xlsx"))
© www.soinside.com 2019 - 2024. All rights reserved.