将 20 GB csv 文件加载到 R 中的最佳方法是啥?

Posted

技术标签:

【中文标题】将 20 GB csv 文件加载到 R 中的最佳方法是啥?【英文标题】:What is the best way to load a 20 GB csv file into R?将 20 GB csv 文件加载到 R 中的最佳方法是什么? 【发布时间】:2019-09-05 13:03:01 【问题描述】:

我有一个 20 GB 的数据集,我必须在 R 中使用它。现在,我已经阅读了几篇如何处理这个问题的文章,但我不知道读取 20 GB 的最佳和最有效的方法是什么R中的数据。

值得一提的是,我不需要所有数据,因此在继续构建模型之前,我必须过滤/清理数据。

用 Chunks 将数据集读入 R 是一个想法吗?将数据读入块到 R 中的最佳方法是什么?

希望有人能帮帮我。

亲切的问候,

马蒂斯

【问题讨论】:

除非您的计算机有 20GB 的 RAM 可用,否则您不能这样做。 嗨蒂姆,我只有 8 GB 的 RAM。但我读过这样的事情是可能的,比如读入 10,000 行,然后清理它,然后再读取接下来的 10,000 行等。 是的,这是可能的。我认为 R 有一个 readLines() 函数可能会对你有所帮助。 您也可以尝试使用“vroom”包:tidyverse.org/articles/2019/05/vroom-1-0-0 它运行良好,虽然我从未尝试过使用 20Gb 文件。不过值得一试!一些基准测试:cran.rstudio.com/web/packages/vroom/vignettes/benchmarks.html 并非所有事情都应该在 R 中完成。您可以将数据加载到 SQL 数据库中,也可以使用命令行工具 (grep/awk) 在读入之前减小 CSV 的大小。read.csv.sql允许您将 CSV 读入 SQLlite 数据库并在其上运行查询,将结果返回给 R。 【参考方案1】:

您可以在不同的部分加载数据。就像您在评论中建议的那样,您可以选择 10 000 行,然后再选择 10 000 行,依此类推。

由于您使用的是 .csv 文件,我建议您使用 read.csv() 函数。

例子:

data <- read.csv("file = C:\Path\To\YourFile.csv", nrows = 10000, skip = 10000)

nrows = 您希望 R 读取的行数。

skip = 您希望 R 跳过的行数。

【讨论】:

【参考方案2】:

data.table 包中的fread 函数可能是您在速度和效率方面的现成函数的最佳选择。如前所述,您仍然可以包含nrowsskip 参数来分段读取数据。

【讨论】:

以上是关于将 20 GB csv 文件加载到 R 中的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将大 csv 文件中的小随机样本加载到 R 数据框中

将大型 csv 文件从 S3 读入 R

将非常大的 CSV 数据集加载到 Python 和 R 中,Pandas 陷入困境

将 CSV 文件加载到 NumPy memmap 数组使用太多内存

从R中的大型.CSV导入和提取随机样本

从 R 中的大型 .CSV 导入和提取随机样本