我有一个超过16G的CSV文件,每行都是文本数据。当我对整个CSV文件数据进行编码(例如,一次热编码)时,由于内存限制,我的进程被终止。有没有办法处理这种“大数据”?
我在考虑将整个CSV文件拆分成多个“较小”的文件,然后将它们附加到另一个CSV文件中,这是处理巨大CSV文件的正确方法吗?
答案 0 :(得分:0)
您的问题未说明您使用何种语言来处理此CSV文件。我将使用C#进行回复,但我认为该策略对Java也同样有效。
您可以尝试使用previous()
类逐行读取文件。这应该照顾事物的阅读方面。
类似的东西:
ListIterator
注意:这是C#中的代码段,并且伪代码比实际代码更多。
您应该使用某种本地数据库技术(SQLite或SQL Server LocalDB甚至MySQL)创建数据库,并将数据加载到一个或多个表中。
然后,您可以根据数据库中保存的数据而不是简单的文本文件编写任何其他进一步处理。
答案 1 :(得分:0)
这已在Reading huge csv files efficiently?
中讨论过对于一个16GB的csv文件,最合理的做法是不要将它全部加载到内存中,而是逐行读取和处理它:
with open(filename, "r") as f:
lines = csv.reader(f)
for line in lines:
#Process the line