You need to enable JavaScript to run this app. Dask用glob读取分区Parquet目录报IndexError,是否支持glob路径匹配?
优惠活动
大模型
产品
解决方案
定价
更多

Dask用glob读取分区Parquet目录报IndexError,是否支持glob路径匹配?

问题解答

是否支持glob通配符?

dask + parquet + pyarrow 的技术组合完全支持glob通配符匹配路径,你遇到的报错属于路径解析或版本兼容问题,不是功能不支持。

报错原因

你写入数据时指定了partition_cols分区参数,所以你代码中data/{filename}.parquet实际是Hive分区格式的根目录,不是单个parquet文件。旧版本dask的pyarrow引擎在处理glob匹配到的多个分区根目录时,存在路径解析bug,会导致内部维护的路径列表为空,访问paths[0]时触发索引越界。

解决方案

按优先级从高到低可选以下方案:

  • 直接读取父目录(最推荐)
    你的所有分区数据都存放在data目录下,不需要使用glob通配符,直接传入父目录路径即可,dask会自动识别所有子分区目录,谓词下推规则也能正常生效:
    ddf= dd.read_parquet("data/", engine='pyarrow', gather_statistics=True, filters=[('STATION', '==', 'CA008202251'), ('ELEMENT', '==', 'TAVG')], columns=['TIME','ELEMENT','VALUE', 'STATION'])
    
  • 手动解析glob路径再传入
    如果你确实需要通过glob筛选特定子目录(比如仅读取部分年份的分区),可以先用标准库glob拿到匹配的路径列表,再传给dask:
    import glob
    target_paths = glob.glob("data/*.parquet")
    ddf= dd.read_parquet(target_paths, engine='pyarrow', gather_statistics=True, filters=[('STATION', '==', 'CA008202251'), ('ELEMENT', '==', 'TAVG')], columns=['TIME','ELEMENT','VALUE', 'STATION'])
    
  • 升级dask版本
    2023.1.0及以上版本的dask修复了glob匹配多分区目录的解析bug,升级后你原本的glob路径写法可以直接正常运行:
    pip install --upgrade dask pyarrow
    

内容的提问来源于stack exchange,提问作者Scott Syms

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 19:09:04