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

使用Dask读取压缩包中多CSV文件遇msgpack异常求助

解决方案:Dask直接读取Zip归档中的多个CSV文件

针对你遇到的msgpack.exceptions.ExtraData错误,核心原因是Zip路径格式与storage_options参数使用不当,以下是无需解压的可行方案:

方案一:使用标准Zip URL格式

直接在read_csv的路径参数中指定Zip归档路径与内部文件匹配规则,无需额外的storage_options:

import dask.dataframe as dd

# 格式:zip://<内部文件匹配规则>@<Zip文件路径>
df = dd.read_csv(
    'zip://BACI*.csv@../input/baci_hs92.zip',
    sep=",",
    dtype={"k":str, "i":int, "j":int, "t":int}
)
df.head()

方案二:显式使用ZipFileSystem

通过fsspec的ZipFileSystem直接操作归档内的文件,适合更复杂的归档结构场景:

import dask.dataframe as dd
from fsspec.implementations.zip import ZipFileSystem

# 初始化Zip文件系统
fs = ZipFileSystem('../input/baci_hs92.zip')
# 匹配归档内的目标CSV文件
csv_paths = fs.glob('BACI*.csv')
# 读取文件
df = dd.read_csv(
    csv_paths,
    sep=",",
    dtype={"k":str, "i":int, "j":int, "t":int},
    storage_options={'fs': fs}
)
df.head()

错误原因说明

你原代码中的storage_options={'fo': '../input/baci_hs92.zip'}参数使用错误:fo是fsspec中用于传入文件对象的参数,而非归档文件路径。错误的参数触发了Dask内部不必要的序列化逻辑,最终导致msgpack相关的解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:50:25