如何有效且快速地将大型 (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 崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地将 hadoop 与大型 MySQL 数据库一起使用?

使用 python 有效地将数据导出到 CSV

如何有效地将大型数据框拆分为多个拼花文件?

如何有效地将数据从 CSV 加载到数据库中?

在 C# 中有效地将数据插入 MySQL 中的多个表中

如何有效地将大型 .tsv 文件上传到 pyspark 中具有拆分列的 Hive 表?