python - 在 Python 中将非常大的文件拆分成较小的文件 - 打开的文件太多

标签 python bigdata

我有一个非常大的 csv 文件(接近 TB),我想根据每一行中的信息将其拆分为更小的 csv 文件。

由于无法在内存中执行此操作,因此我打算采用的方法是读取每一行,决定应将其放入哪个文件,然后将其追加到那里。然而,这需要很长时间,因为打开和关闭时间太长。

我的第二种方法是让所有文件(大约 3000 个)保持打开状态 - 但是这不起作用,因为我不能同时打开那么多文件。

按要求提供的其他详细信息:.csv 文件包含我需要按区域访问的 map 数据。因此,我计划将其聚类到覆盖不同边界框的文件中。由于它是未排序的数据,我必须处理每行的纬度/经度,为其分配正确的文件,并将该行附加到文件。

什么是可行的(快速的,理想的)方法?

最佳答案

这可能有点 hacky 方法,但它需要 pandas 并进行一些批量追加。这将解决在每行处理期间必须打开和关闭文件的问题。我将假设您将行分类到 CSV 的方式是基于大型 CSV 中某列的某些值。

import pandas as pd
import os

df_chunked = pd.read_csv("myLarge.csv", chunksize=30000)  # you can alter the chunksize

for chunk in df_chunked:
    uniques = chunk['col'].unique().tolist()
    for val in uniques:
        df_to_write = chunk[chunk['col'] == val]
        if os.path.isfile('small_{}.csv'.format(val)):  # check if file already exists
            df_to_write.to_csv('small_{}.csv'.format(val), mode='a', index=False, header=False)
        else:
            df_to_write.to_csv('small_{}.csv'.format(val), index=False)

关于python - 在 Python 中将非常大的文件拆分成较小的文件 - 打开的文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50062474/

相关文章:

laravel - 如何在laravel上插入大数据?

node.js - 通过 Node.js 从 MongoDB 返回大量项目

python - 更改 Ansible_Python_Interpreter 时出现问题

python - DRBD 配置文件格式是标准格式吗?

python - 如何合并重叠的列

hadoop - 在 Hive 上重建索引失败

python - 如何通过 pyspark/hadoop/etc 提高程序的速度?

python - 根据条件对 groupby 求和值

python - 循环遍历列表的嵌套列表

java - 为cloudera中的oozie作业配置JAVA_HOME?