将 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
函数可能是您在速度和效率方面的现成函数的最佳选择。如前所述,您仍然可以包含nrows
和skip
参数来分段读取数据。
【讨论】:
以上是关于将 20 GB csv 文件加载到 R 中的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
将非常大的 CSV 数据集加载到 Python 和 R 中,Pandas 陷入困境