【发布时间】:2017-12-05 08:21:12
【问题描述】:
我有一个非常大的 CSV 文件,我需要将其加载到 sqlite3 中的表中。我无法将整个 CSV 内容作为变量加载到 RAM 中,因为数据太大,为每列定义类型的事件无法放入 64 GB 的 RAM。
我尝试使用 numpy 和 pandas 来加载和转换数据,但仍然超出 RAM 限制。
我想以某种方式一次(或以较小的批次)读取 CSV 1 行并逐步将它们保存到数据库中以保持较低的 RAM 使用率。如果可以使用多个 CPU 内核来完成,那就完美了。
【问题讨论】:
-
您可能会受到 IO 限制。一开始只需一次读一行,看看你是怎么理解的。如果花费的时间太长,您可以进行批处理,然后,如果花费的时间太长,请考虑多处理。你可能会发现多处理会减慢它的速度,因为锁会序列化访问。
-
当您尝试使用 Python
csv模块时发生了什么? -
速度不是问题,它可以很慢地运行,从我的SSD读写数据到HDD。它只需要适应有限数量的 RAM。多处理将是一个不错的好处,但在这种情况下不是必需的。
-
我尝试使用 csv 模块来加载 CSV 文件,它使用了我所有的 RAM。还不知道如何在较小的部分中阅读。
-
for row in csv.reader(file_object):将一次读取一行。见csv.reader