gpt4 book ai didi

R 中使用 fread 的 data.table 的行限制

转载 作者:行者123 更新时间:2023-12-03 05:09:54 30 4
gpt4 key购买 nike

我想知道使用 data.table fread 函数可以读取的行数是否有限制。我正在处理一个包含 40 亿行、4 列、大约 40 GB 的表。看起来 fread 将只读取前 8.4 亿行。它不会给出任何错误,而是返回到 R 提示符,就好像它已读取所有数据一样!

我知道 fread 目前不适用于“产品使用”,并且想了解是否有实现产品发布的时间表。

我使用 data.table 的原因是,对于这种大小的文件,与在 data.frame 等中加载文件相比,它处理数据的效率非常高。

目前,我正在尝试其他两种选择 -

1) 使用扫描并传递到 data.table

data.table(matrix(scan("file.csv",what="integer",sep=","),ncol=4))

Resulted in --
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
too many items

2) 将文件分成多个单独的片段,限制约为。使用 Unix 分割并按顺序读取 5 亿行...然后按顺序循环文件到 fread - 有点麻烦,但似乎是唯一可行的解​​决方案。

我认为可能有一种 Rcpp 方法可以更快地做到这一点,但我不确定它通常是如何实现的。

提前致谢。

最佳答案

我能够利用 Stackoverflow 上另一篇帖子的反馈来完成此任务。该过程非常快,使用 fread 迭代大约 10 分钟就读取了 40 GB 的数据。由于某些限制,Foreach-dopar 在单独运行时无法按顺序将文件读​​入新的 data.tables,这些限制也在下面的页面中提到。

注意:文件列表(file_map)是通过简单地运行--

来准备的
file_map <- list.files(pattern="test.$")  # Replace pattern to suit your requirement

mclapply with big objects - "serialization is too large to store in a raw vector"

引用——

collector = vector("list", length(file_map)) # more complex than normal for speed 

for(index in 1:length(file_map)) {
reduced_set <- mclapply(file_map[[index]], function(x) {
on.exit(message(sprintf("Completed: %s", x)))
message(sprintf("Started: '%s'", x))
fread(x) # <----- CHANGED THIS LINE to fread
}, mc.cores=10)
collector[[index]]= reduced_set

}

# Additional line (in place of rbind as in the URL above)

for (i in 1:length(collector)) { rbindlist(list(finalList,yourFunction(collector[[i]][[1]]))) }
# Replace yourFunction as needed, in my case it was an operation I performed on each segment and joined them with rbindlist at the end.

我的函数包含一个使用 Foreach dopar 的循环,该循环在 file_map 中指定的每个文件的多个核心上执行。这使我能够使用 dopar,而不会在组合文件上运行时遇到“序列化太大错误”。

另一个有用的帖子位于 -- loading files in parallel not working with foreach + data.table

关于R 中使用 fread 的 data.table 的行限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17596249/

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