【问题标题】:Read single large zipped csv (too large for memory) using Dask使用 Dask 读取单个大型压缩 csv(内存太大)
【发布时间】:2021-06-29 09:05:40
【问题描述】:

我有一个用例,我有一个 S3 存储桶,其中包含数百个 gzip 压缩文件的列表。每个单独的文件在解压缩并加载到数据帧中时,占用的内存都超过了可用内存。我想阅读这些文件并执行一些功能。但是,我似乎无法弄清楚如何解决这个问题。我已经尝试过 Dask 的 read_table,但由于 compression='gzip' 似乎需要 blocksize=None,这似乎不起作用。有什么我想念的吗?还是有更好的方法?

这是我尝试调用 read_table 的方式(请注意,名称、类型和空值在其他地方定义):

df = dd.read_table(uri,
        compression='gzip',
        blocksize=None,
        names=names,
        dtype=types,
        na_values=nulls,
        encoding='utf-8',
        quoting=csv.QUOTE_NONE,
        error_bad_lines=False)

我愿意接受任何建议,包括改变整个方法。

【问题讨论】:

    标签: python dask dask-distributed


    【解决方案1】:

    这不能直接完成,因为知道您在 gzip 文件流中的位置的唯一方法是从一开始就读取它。这意味着每个数据分区都需要从头开始读取整个文件,因此 Dask 决定改为显式错误。

    理论上,我可能会扫描您的文件一次,并找出 gzip 块从哪里开始。但是,据我所知,没有代码可以做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-24
      • 2020-06-09
      • 2022-01-06
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      相关资源
      最近更新 更多