我想使用以下代码打开位于 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 中?如果是的话,怎么办?
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"))