如何高效快速地将一个大小为6GB的.csv文件导入R中,同时避免R交互界面崩溃?

3

我有一个很大的.csv文件,需要将其导入R以进行数据操作。我使用read.csv(file.csv)方法,并将方法的结果赋值给变量MyData。然而,当我尝试在R REPL中运行此命令时,程序崩溃了。有没有一种高效快速的方法来处理/读取.csv文件,而不会使终端崩溃?如果没有,那么我应该使用Python吗?


你也应该考虑使用readr包中的read_lines逐行操作。 - CPak
我在处理非常大(压缩)CSV文件时的查询方法:https://dev59.com/TcHqa4cB1Zd3GeqP36Jz#68693819 - San
1个回答

4
如果您尝试加载大于可用内存的文件,R将崩溃,因此您应该确保您至少有6GB的可用空间(6GB .csv在内存中大约也是6GB)。Python也会遇到同样的问题(显然几年前有人在stackoverflow上问过完全相同的问题)。
读取大型CSV文件时,您应该使用readr :: read_csv()data.table :: fread(),因为两者都比base :: read.table()快得多。 readr :: read_csv_chunked支持分块读取CSV文件,因此如果您不需要一次获取所有数据,那可能有所帮助。您也可以尝试仅读取感兴趣的列,以使内存占用更小。

1
readr::read_csv_chunked 的实现是什么样子的?我该如何在程序结束时将从大型 .csv 文件中获取的所有块连接在一起? - asdf asdf
1
那就是问题所在,如果它无法适应您的系统内存,您就无法处理它。如果您真的需要那么大的文件,您应该考虑使用数据库,或者您可以尝试使用ff包。我没有使用过它,但我认为与data.frames相比,ff对象有一些限制,因此这也取决于您想要对数据做什么,这是否对您有用。 - Stefan F
好的,这不是我选择的解决方案,但它对于所提供的问题是令人满意的,所以我会检查它。 - asdf asdf
抱歉,如果数据超出内存限制,R 就会变得很麻烦 :/ 我想真正的答案是“增加更多的内存”。 - Stefan F
我在处理非常大(压缩)csv文件时的查询方法:https://dev59.com/TcHqa4cB1Zd3GeqP36Jz#68693819 这是使用readr::read_csv_chunked的演示。 - San

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接