You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Databricks Python笔记本中读取DBFS内的多个.csv文件

问题根源

Python标准库的glob模块无法识别dbfs:/开头的Databricks文件系统协议路径,执行glob.glob时会返回空列表,li为空列表时执行pd.concat就会抛出你遇到的ValueError: No objects to concatenate报错。
你可以单独读取单个文件是因为Databricks对pandas的文件读取接口做了专属适配,支持直接传入dbfs:/开头的路径。

解决方案

方案1:替换路径为本地挂载格式(无需修改原有代码逻辑)

Databricks运行节点会默认将DBFS文件系统挂载到本地/dbfs目录下,glob可以正常识别该本地路径格式,只需修改路径前缀即可:

# 仅修改路径前缀,将dbfs:/替换为/dbfs/
path = r'/dbfs/FileStore/shared_uploads/path/' 
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0, low_memory=False)
    li.append(df)

data = pd.concat(li, axis=0, ignore_index=True)

方案2:使用Databricks原生工具遍历文件(推荐)

用Databricks内置的dbutils.fs.ls接口遍历DBFS路径,原生支持dbfs:/协议,兼容性更好:

path = r'dbfs:/FileStore/shared_uploads/path/'
# 遍历路径下所有csv文件
all_files = [f.path for f in dbutils.fs.ls(path) if f.name.endswith('.csv')]
li = []
for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0, low_memory=False)
    li.append(df)

data = pd.concat(li, axis=0, ignore_index=True)

方案3:用Spark批量读取(适合大文件/多文件场景)

如果csv文件数量多、总数据量大,直接用Spark并行读取后转pandas,性能远高于循环读取单个文件:

# 批量读取路径下所有csv文件
spark_df = spark.read.csv("dbfs:/FileStore/shared_uploads/path/*.csv", header=True, inferSchema=True)
# 单节点内存足够容纳全量数据时可转pandas DataFrame
data = spark_df.toPandas()

内容的提问来源于stack exchange,提问作者Vladislava Gonchar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:54:01