我正在尝试从20个大型数据集中解析JSON: 当我一遍又一遍地追加数据时,会花费很多时间。 而且,似乎时间逐行呈指数增长。 因此,我想到了将数据分成碎片,然后逐块处理。 内部循环可以正常工作,但我可以附加所有块。
此外,理想情况下,我希望将子集从内部foreach中分解成块,但是一旦这样做,我就会遇到另一个错误。
chunk <- 1000
n <- nrow(daily.db)
chunkn<-ceiling(n/chunk)
db<-rbindlist(foreach(i = 1:length(chunkn)) %:%
rbindlist(foreach(j=1:nrow(subset.db)) %dopar% {
subset.db<-daily.db[((i-1)*1000+1):min(((i-1)*1000+1)+999,length(daily.db$filter))]
json1<-jsonlite::fromJSON(txt =subset.db$filter[j])
.db<-as.data.table(t(unlist(json1)))
.db},fill=TRUE)
,fill = TRUE)
答案 0 :(得分:0)
似乎更好的做法是为内循环创建一个函数:
parralelparsing<-function(subset.db) {
rbindlist(foreach(j=1:nrow(subset.db)) %dopar% {
json1<-jsonlite::fromJSON(txt =subset.db$filter[j])
.db<-as.data.table(t(unlist(json1)))
.db},fill=TRUE)
}
然后使用循环,在一段代码上使用此功能:
chunk <- 10000
n <- nrow(daily.db)
chunkn<-ceiling(n/chunk)
db<-NULL
for (i in 1:chunkn) {
.subset.db<-daily.db[((i-1)*chunk+1):min(((i-1)*chunk+1)+chunk-1,length(daily.db$filter))]
.db<-parralelparsing(.subset.db)
db<-rbindlist(list(db,.db),fill = T)
}