【发布时间】:2021-10-05 05:53:27
【问题描述】:
我有 1000 个json 文件。我想同时阅读它们。我有4 CPU 内核。
我有一个字符向量,其所有文件的名称如下:-
cik_files <- list.files("./data/", pattern = ".json")
并使用这个vector 加载文件并提取数据并将其添加到以下列表中:-
data <- list()
下面是提取数据的代码:-
for(i in 1:1000){
data1 <- fromJSON(paste0("./data/", cik_files[i]), flatten = TRUE)
if(("NetIncomeLoss" %in% names(data1$facts$`us-gaap`))){
data1 <- data1$facts$`us-gaap`$NetIncomeLoss$units$USD
data1 <- data1[grep("CY20[0-9]{2}$", data1$frame), c(3, 9)]
try({if(nrow(data1) > 0){
data1$cik <- strtrim(cik_files[i], 13)
data[[length(data) + 1]] <- data1
}}, silent = TRUE)
}
}
然而,这需要相当多的时间。所以我想知道如何在 for 循环中并行运行代码。
提前致谢。
【问题讨论】:
-
你用的是什么JSON访问包,RJSONIO、rjson还是jsonlite?
-
在列表中使用
lapply而不是 for 循环。mclapply可以从parallell使用来并行化。考虑使用data.table中的fread来读取文件。 -
@Rui Barradas,我正在使用 jsonlite。
标签: r foreach parallel-processing snow