编程语言
首页 > 编程语言> > python-使用dask合并csv文件

python-使用dask合并csv文件

作者:互联网

我是python的新手.我正在使用dask读取5个大(> 1 GB)的csv文件,并将它们合并(类似SQL)到dask数据帧中.现在,我正在尝试将合并结果写入单个csv中.我在dask数据帧上使用了compute()将数据收集到单个df中,然后调用to_csv.但是,compute()在所有分区上读取数据的速度都很慢.我尝试直接在dask df上调用to_csv,它创建了多个.part文件(我没有尝试将那些.part文件合并到一个csv中).有没有其他选择可以将daf df放入单个csv中,或者可以使用任何参数来compute()来收集数据.我正在将6GB RAM与HDD和i5处理器一起使用.

谢谢

解决方法:

Dask.dataframe将不会写入单个CSV文件.如您所述,它将写入多个CSV文件,每个分区一个文件.您调用.compute().to_csv(…)的解决方案会起作用,但是调用.compute()会将完整的dask.dataframe转换为Pandas数据帧,这可能会占用内存.

一种选择是完全避免Pandas和Dask,而只是从多个文件中读取字节并将它们转储到另一个文件中

with open(out_filename, 'w') as outfile:
    for in_filename in filenames:
        with open(in_filename, 'r') as infile:
            # if your csv files have headers then you might want to burn a line here with `next(infile)
            for line in infile:
                outfile.write(line + '\n')

如果您除了将CSV文件合并为一个更大的文件之外不需要执行其他任何操作,那么我就这样做,根本不用碰熊猫/黄昏.他们将尝试将CS​​V数据读取到内存中的数据中,这将花费一些时间,而且您不需要.另一方面,如果您需要对pandas / dask进行一些处理,则可以使用dask.dataframe读取和处理数据,写入许多csv文件,然后使用上述技巧将它们合并.

您可能还考虑写入CSV以外的数据存储. HDF5和Parquet等格式可以更快. http://dask.pydata.org/en/latest/dataframe-create.html

标签:dask,python
来源: https://codeday.me/bug/20191111/2020795.html