gpt4 book ai didi

python - 使用 dask 合并 csv 文件

转载 作者:太空宇宙 更新时间:2023-11-03 15:56:24 25 4
gpt4 key购买 nike

我是 python 新手。我正在使用 dask 读取 5 个大型(> 1 GB)csv 文件并将它们合并(类似 SQL)到一个 dask 数据帧中。现在,我正在尝试将合并结果写入单个 csv。我在 dask 数据帧上使用 compute() 将数据收集到单个 df 中,然后调用 to_csv。但是,compute() 在跨所有分区读取数据时速度很慢。我尝试直接在 dask df 上调用 to_csv,它创建了多个 .part 文件(我没有尝试将这些 .part 文件合并到 csv 中)。是否有任何替代方法可以将 dask df 转换为单个 csv 或 compute() 的任何参数以收集数据。我使用的是 6GB 内存和 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 文件合并到一个更大的文件之外不需要做任何事情,那么我会这样做,根本不接触 pandas/dask。他们会尝试将 CSV 数据读入内存数据,这需要一段时间,而您不需要这样做。另一方面,如果您需要使用 pandas/dask 进行一些处理,那么我会使用 dask.dataframe 来读取和处理数据,写入许多 csv 文件,然后使用上面的技巧将它们合并。

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

关于python - 使用 dask 合并 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42965337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com