使用dask加载大型压缩数据集

3
我正在尝试将一个包含以下结构的大型压缩数据集加载到Python中:
  • year.zip
    • year
      • month
        • 许多csv文件
到目前为止,我已经使用ZipFile库来遍历每个CSV文件并使用pandas加载了它们。
zf = ZipFile(year.zip)

for file in zf.namelist:
    try:
        pd.read_csv(zf.open(file))

代码运行时间很长,我正在寻找优化方法。我找到了使用Dask库的选项。但是,我无法弄清楚如何最好地实现它,以便一次命令就可以访问至少一个月的CSV文件。有什么建议吗?同时也欢迎其他优化方法。

1个回答

3
有几种方法可以实现这个功能。最接近你的建议的方法可能是:

有几种方法可以实现这个功能。最接近你的建议的方法可能是:

zf = ZipFile("year.zip")
files = list(zf.namelist)
parts = [dask.delayed(pandas.read_csv)(f) for f in files)]
df = dd.from_delayed(parts)

这是因为zipfile有一个偏移列表,所以组件文件可以独立读取;然而,性能可能取决于存档的创建方式,并且请记住:您只有一个存储设备,从设备的吞吐量可能会成为瓶颈。也许更像dask的方法是利用fsspec的功能,它是dask使用的文件系统抽象。
df = dd.read_csv('zip://*.csv', storage_options={'fo': 'year.zip'})

当然,选择适合你的文件的全局模式;如果你在它们前面加上“zip://”,你也可以在这里使用文件列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接