gpt4 book ai didi

r - readLines可以在R中并行执行吗

转载 作者:行者123 更新时间:2023-12-02 10:04:28 24 4
gpt4 key购买 nike

是否可以在单个多核机器上与 R 并行地迭代单个文本文件?对于上下文,文本文件的 JSON 输出大小介于 250-400MB 之间。

编辑:

这是我一直在使用的一些代码示例。令我惊讶的是,并行处理没有获胜 - 只是基本的 lapply - 但这可能是由于我的用户错误造成的。另外,当尝试读取多个大文件时,我的机器卡住了。

## test on first 100 rows of 1 twitter file
library(rjson)
library(parallel)
library(foreach)
library(plyr)
N = 100
library(rbenchmark)
mc.cores <- detectCores()
benchmark(lapply(readLines(FILE, n=N, warn=FALSE), fromJSON),
llply(readLines(FILE, n=N, warn=FALSE), fromJSON),
mclapply(readLines(FILE, n=N, warn=FALSE), fromJSON),
mclapply(readLines(FILE, n=N, warn=FALSE), fromJSON,
mc.cores=mc.cores),
foreach(x=readLines(FILE, n=N, warn=FALSE)) %do% fromJSON(x),
replications=100)

这是第二个代码示例

parseData <- function(x) {
x <- tryCatch(fromJSON(x),
error=function(e) return(list())
)
## need to do a test to see if valid data, if so ,save out the files
if (!is.null(x$id_str)) {
x$created_at <- strptime(x$created_at,"%a %b %e %H:%M:%S %z %Y")
fname <- paste("rdata/",
format(x$created_at, "%m"),
format(x$created_at, "%d"),
format(x$created_at, "%Y"),
"_",
x$id_str,
sep="")
saveRDS(x, fname)
rm(x, fname)
gc(verbose=FALSE)
}
}

t3 <- system.time(lapply(readLines(FILES[1], n=-1, warn=FALSE), parseData))

最佳答案

答案取决于问题的实际情况:并行读取文件,或并行处理文件。

并行阅读

您可以将 JSON 文件拆分为多个输入文件并并行读取它们,例如使用 plyr 函数与并行后端相结合:

result = ldply(list.files(pattern = ".json"), readJSON, .parallel = TRUE)

注册后端可能可以使用 parallel 包来完成,该包现已集成在基础 R 中。或者您可以使用 doSNOW 包,请参阅 this post on my blog了解详情。

并行处理

在这种情况下,您最好的选择是将整个数据集读入字符向量,分割数据,然后使用并行后端与例如plyr 函数。

关于r - readLines可以在R中并行执行吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13571467/

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