gpt4 book ai didi

在不超过我的 RAM 的情况下分块读取 20GB 文件 - R

转载 作者:行者123 更新时间:2023-12-01 12:49:28 25 4
gpt4 key购买 nike

我目前正在尝试读取一个 20GB 的文件。我只需要该文件的 3 列。
我的问题是,我被限制为 16 GB 的内存。我尝试使用 readr并使用函数 read_csv_chunked 分 block 处理数据和 read_csv使用跳过参数,但它们都超出了我的 RAM 限制。
甚至 read_csv(file, ..., skip = 10000000, nrow = 1)读取一行的调用耗尽了我所有的 RAM。

我现在的问题是,我怎样才能读取这个文件?有没有办法在不使用那么多内存的情况下读取文件 block ?

最佳答案

LaF包可以以 block 的形式读取 ASCII 数据。可以直接使用,也可以使用dplyr chunked包使用它来提供与 dplyr 一起使用的接口(interface)。

readr包有 readr_csv_chunked及相关功能。

本栏目web page标题为 The Loop 以及该页面的后续部分描述了如何使用 base R 进行分 block 读取。

可能是如果您删除除前三列之外的所有列,它将小到足以读取并一次处理。
vroomvroom包可以非常快速地读入文件,也可以只读入 select= 中命名的列。论点可能使它足够小,可以一口气读完。
freaddata.table包是一个快速阅读功能,也支持select=只能选择指定列的参数。
read.csv.sqlsqldf (另见 github page )包可以将大于 R 可以处理的文件读取到临时外部 SQLite 数据库中,它会为您创建并随后删除并读取给定到 R 中的 SQL 语句的结果。如果前三列被命名col1、col2 和 col3 然后尝试下面的代码。有关取决于您的文件的其余参数,请参见 ?read.csv.sql 和 ?sqldf 。

library(sqldf)
DF <- read.csv.sql("myfile", "select col1, col2, col3 from file",
dbname = tempfile(), ...)
read.tableread.csv在 R 的基础上有一个 colClasses=参数,它采用列类的向量。如果文件有 nc 列,则使用 colClasses = rep(c(NA, "NULL"), c(3, nc-3))只阅读前 3 列。

另一种方法是使用 cut、sed 或 awk(在 UNIX 和 Windows 上的 Rtools bin 目录中 native 可用)或许多免费命令行实用程序中的任何一个,例如 csvfix 来预处理文件。在 R 之外删除除前三列之外的所有列,然后查看它是否足够小,可以一口气阅读。

另请查看 High Performance Computing任务 View 。

关于在不超过我的 RAM 的情况下分块读取 20GB 文件 - R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60928866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com