首页 > 解决方案 > 在 dask 中合并多个大型数据框

问题描述

我有多个(约 50 个)大(每个约 1 到 5gb)csv 文件,我想将它们合并到一个大的 csv 文件中。使用 dask,我创建了一个循环,该循环打开每个 csv 并在循环结束时将所有内容保存到 csv 之前调用 merge:

for i, file in enumerate(files):

    table = dd.read_csv(file)
    if i == 0:
        merged = table
    else:
        merged = dd.merge(merged, table, on = ["id", "time", "key"])

merged.to_csv("merged\merged1810_*.csv")

但是,这样做会导致MemoryError.

我虽然 Dask 应该分块执行计算以避免这些类型的错误,但我的数据是否太大而 Dask 无法处理?有没有更好的方法来解决这个问题?

标签: pythondataframebigdatadask

解决方案


你知道你的文件/数据是如何组织的,还是完全随机的?

例如,您能否轻松地将您的 csv 文件重新排列为多个文件,例如,一个包含所有时间(id、key)的文件?然后您可以顺序合并每个文件并附加到更大的文件吗?假设每个“分区”都适合内存。

如果您没有太多 (id, key) 对,这可能是可以管理的。我遇到了类似的问题,最终做了类似的事情并与 dask 并行化。可能不是最有效/最漂亮的,但它完成了工作......

希望能帮助到你,

干杯


推荐阅读