Databricks工作区中使用Pandas正确读取CSV文件的方法
在Databricks中正确加载CSV文件的解决方案
问题原因
Databricks工作区的文件并不直接映射到driver节点的本地文件系统,使用pandas默认的相对路径读取会找不到文件,必须使用Databricks文件系统(DBFS)的正确路径或者工作区路径。
解决方法
1. 先确认文件的真实路径和名称
在Notebook中执行以下命令,查看目标文件的真实路径和文件名(解决目录树不显示扩展名的问题):
# 替换为你的data文件夹所在的工作区路径,比如"/Workspace/Users/你的邮箱/data" dbutils.fs.ls("/Workspace/你的工作区路径/data")
执行后会列出该文件夹下的所有文件,你可以看到文件的真实名称(是否带扩展名)和完整路径。
2. 方法一:使用完整DBFS路径直接读取
将步骤1中获取的路径加上/dbfs前缀,作为pandas的读取路径:
import pandas as pd # 替换为实际的DBFS路径 items = pd.read_csv('/dbfs/Workspace/你的工作区路径/data/fastFasionItemsDim.csv', sep='|')
3. 方法二:自动获取当前Notebook路径拼接文件(适配动态位置)
如果Notebook可能移动位置,可通过代码自动获取当前目录路径,避免手动修改路径:
import pandas as pd from pathlib import Path # 获取当前Notebook的工作区路径 notebook_path = dbutils.notebook.entry_point.getDbutils().notebook().getContext().notebookPath().get() # 提取Notebook所在的父目录 notebook_dir = str(Path(notebook_path).parent) # 转换为DBFS可直接访问的路径 dbfs_file_path = f"/dbfs{notebook_dir}/data/fastFasionItemsDim.csv" items = pd.read_csv(dbfs_file_path, sep='|')
4. 方法三:使用Spark读取后转Pandas(推荐分布式场景)
如果数据量较大,更推荐用Spark读取(适配Databricks分布式环境),再转为Pandas DataFrame:
# 直接使用工作区路径读取,无需/dbfs前缀 spark_df = spark.read.csv('/Workspace/你的工作区路径/data/fastFasionItemsDim.csv', sep='|', header=True, # 如果文件有表头 inferSchema=True) # 转换为Pandas DataFrame items = spark_df.toPandas()
注意事项
- 若步骤1中发现文件真实名称不带扩展名(比如
fastFasionItemsDim),则所有路径中的文件名需去掉.csv后缀。 - 确认当前Notebook拥有该data文件夹的读取权限,若为共享文件夹需联系管理员配置权限。
内容的提问来源于stack exchange,提问作者juuso
相关产品推荐
相关产品推荐

