是否可以在單個多核機器上與R並行迭代單個文本文件?對於上下文,文本文件在250-400MB的JSON輸出之間。可以在R中並行執行讀取線路
編輯:
這是我一直在玩的一些代碼示例。令我驚訝的是,並行處理沒有贏 - 只是基本的樂句 - 但這可能是由於我的用戶錯誤。另外,當試圖讀取一些大文件時,我的機器窒息。
## 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文件或解析JSON文件時出現問題嗎? –
都沒有。當我嘗試使用簡單的for循環時,我的機器最終凍結。我試圖針對每個JSON條目運行一個函數,保存單獨的rds文件以讀回,等等。對於每個選項,我都會意識到內存使用情況並嘗試在可能的情況下進行優化和清理。有些想法很糟糕,但最後我想找出一些方法來「分析」更大的數據集,只是使用Base R,而忽略了目前存在更好的解決方案這一事實。 – Btibert3
一個可重複的例子會讓我們更容易提供反饋。 –