如何有效且快速地将大型 (6 Gb) .csv 文件导入 R,而不会导致 R REPL 崩溃?
Posted
技术标签:
【中文标题】如何有效且快速地将大型 (6 Gb) .csv 文件导入 R,而不会导致 R REPL 崩溃?【英文标题】:How do I import a large (6 Gb) .csv file into R efficiently and quickly, without the R REPL crashing? 【发布时间】:2017-08-09 15:17:38 【问题描述】:我有一个大的 .csv 文件,我需要将其导入 R 以便对其进行一些数据操作。我正在使用read.csv(file.csv)
方法,我将方法的结果分配给某个变量MyData
。但是,当我尝试在 R REPL 中运行它时,程序崩溃了。有没有办法在 R 中高效快速地处理/读取一个不会导致终端崩溃的 .csv 文件?如果没有,我不应该只使用 Python 吗?
【问题讨论】:
您还应该考虑在readr
包中使用read_lines
逐行操作
我在超大(压缩)csv 文件上运行查询的方法:***.com/a/68693819/8079808
【参考方案1】:
如果您尝试加载大于可用内存的文件,R 将崩溃,因此您应该看到您至少有 6gb 的可用内存(6gb .csv 的内存也大约为 6gb)。 Python会有同样的问题 (显然几年前有人问过exact same question for python)
要读取大型 csv 文件,您应该使用 readr::read_csv()
或 data.table::fread()
,因为两者都比 base::read.table()
快得多。
readr::read_csv_chunked
支持分块读取 csv 文件,因此如果您不需要一次获取全部数据,这可能会有所帮助。您也可以尝试只读取感兴趣的列,以保持较小的内存大小。
【讨论】:
readr::read_csv_chunked 的实现是什么样的?如何获取从大 .csv 中获得的所有块并在程序结束时将它们连接在一起? 这就是问题所在,如果它不适合您的系统内存,您就不能这样做。如果你真的需要这么大的文件,你应该考虑使用数据库,或者你可以试试ff package。我没有使用过,但我认为 ff 对象与 data.frames 相比有一些限制,所以它还取决于你想用你的数据做什么,这对你是否有用 好的,这不是我选择的解决方案,但是对于提供的问题来说,它是一个令人满意的解决方案,所以我会检查一下 抱歉,R 会因为内存不足的数据而变得很麻烦:/ 我想真正的答案是“获得更多内存” 我在非常大(压缩)的 csv 文件上运行查询的方法:***.com/a/68693819/8079808 这是使用readr::read_csv_chunked
的演示以上是关于如何有效且快速地将大型 (6 Gb) .csv 文件导入 R,而不会导致 R REPL 崩溃?的主要内容,如果未能解决你的问题,请参考以下文章