合并多个大型数据框

时间:2018-10-22 18:00:43

标签: python dataframe bigdata dask

我有多个(〜50个)大型csv文件(每个〜1至5gb),我想合并成一个大的csv文件。 我使用dask创建了一个循环,该循环打开每个csv并调用merge,然后在循环结束时将所有内容保存到csv:

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无法处理吗? 有没有更好的办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

您需要完全合并/联接,还是需要一个简单的concat?

df = dd.read_csv(files)

完全并行执行合并/连接可能非常昂贵,尤其是在内存不足的情况下。很少有人会像这样反复地合并/合并许多数据框。我怀疑dd.read_csvdd.concat可能是更好的解决方案。 (尽管我不知道您的申请)

答案 1 :(得分:0)

您是否了解文件/数据的组织方式或完全随机?

例如,您是否可以轻松地将csv文件重新排列成几个文件,例如每个文件(id,key)都重复排列一次? 然后,您可以依次合并每个文件并追加到更大的文件中?假设每个“分区”都适合内存。

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

希望有帮助,

欢呼