如何使用Dask的read_csv递归读取多级目录下的所有CSV文件并将每个文件作为一个分区
使用Dask读取多文件夹下的CSV并按文件单独分区
嘿,这个需求其实Dask原生就支持得很好,不用额外写复杂逻辑来拆分分区,几步就能搞定:
核心思路
Dask的read_csv函数默认会把每个输入文件作为一个独立的分区,所以我们只需要用通配符精准匹配到所有目标CSV文件就行。
具体代码实现
假设你的根文件夹路径是Folder,可以用递归通配符**来匹配所有子文件夹里的CSV文件:
import dask.dataframe as dd # 匹配Folder下所有子文件夹中的.csv文件 df = dd.read_csv("Folder/**/*.csv")
验证分区是否符合预期
你可以通过下面的代码查看分区数量,它应该等于所有CSV文件的总数(你的例子里是4+2+2=8个分区):
print(f"分区总数: {len(df.partitions)}")
一些额外注意事项
- 如果不同CSV文件的列结构不一致,可以添加
dtype参数指定统一的数据类型,或者用on_bad_lines='skip'跳过格式有问题的行(旧版Dask用error_bad_lines=False)。 - 如果你需要更精准地控制文件列表,也可以手动收集所有CSV路径再传给
read_csv,效果完全一致:import glob # 递归收集所有CSV文件路径 file_paths = glob.glob("Folder/**/*.csv", recursive=True) df = dd.read_csv(file_paths)
内容的提问来源于stack exchange,提问作者S_S
相关产品推荐
相关产品推荐

