Azure Databricks:Pandas无法读取已挂载ADSL2中的存在文件
问题原因
dbutils.fs.ls操作的是Databricks文件系统(DBFS),而Pandas的pd.read_excel默认读取的是集群节点的本地文件系统,不是DBFS。你挂载的ADLS2路径/mnt/myMnt是DBFS上的挂载点,并非本地节点的路径,所以Pandas会报文件找不到的错误。
解决方法(无需额外迁移文件)
方法1:添加DBFS本地映射前缀
DBFS在集群节点的本地文件系统中有固定映射路径/dbfs,给原路径加上这个前缀,Pandas就能识别到文件:
import pandas as pd # 路径前添加/dbfs前缀 path = "/dbfs/mnt/myMnt/20241007112914_Statistik_789760_0000_327086871111430.xlsx" df_xl = pd.read_excel(path, engine="openpyxl")
这个方法最简单,且对集群所有节点有效。
方法2:复制文件到节点本地临时目录
把DBFS上的文件复制到节点本地的/tmp目录,再用Pandas读取:
import pandas as pd import os # 复制DBFS文件到本地/tmp dbutils.fs.cp("/mnt/myMnt/20241007112914_Statistik_789760_0000_327086871111430.xlsx", "file:/tmp/temp_excel.xlsx") # 读取本地文件 df_xl = pd.read_excel("/tmp/temp_excel.xlsx", engine="openpyxl") # 读取完成后可删除临时文件(可选) os.remove("/tmp/temp_excel.xlsx")
注意:本地临时目录仅对当前节点有效,适合单节点任务场景。
方法3:用Spark读取后转Pandas DataFrame
这是更贴合Databricks生态的方式,适合大文件的分布式读取:
# 先安装Spark Excel依赖(首次运行需要) %pip install spark-excel # 用Spark读取Excel文件 spark_df = spark.read.format("com.crealytics.spark.excel") \ .option("header", "true") \ .option("inferSchema", "true") \ .load("/mnt/myMnt/20241007112914_Statistik_789760_0000_327086871111430.xlsx") # 转换为Pandas DataFrame df_xl = spark_df.toPandas()
关于“迁移到DBFS”的说明
你已经通过挂载操作把ADLS2的文件接入到DBFS的/mnt/myMnt路径下了,不需要额外迁移文件。DBFS本身就是Databricks的分布式文件系统,挂载后文件已可通过DBFS访问,只是Pandas无法直接识别DBFS原生路径,需要用上述方法处理。
内容的提问来源于stack exchange,提问作者Prefect73
相关产品推荐
相关产品推荐

