içinde paralel olarak yürütülür. R? Ile paralel olarak tek bir çok çekirdekli makinede tek bir metin dosyası üzerinde yineleme yapılabilir mi? Bağlam için metin dosyası 250-400MB JSON çıkışı arasında bir yerdedir.ReadLines, R
DÜZENLEME:
İşte ile oynamak bazı kod örnekleri vardır. Sürprizime paralel işlem başarısız oldu - sadece basit bir lapply - ama bu benim bölümümdeki kullanıcı hatası yüzünden olabilir. Ayrıca, bir dizi büyük dosyayı okumaya çalışırken, makinem tıkalı. İşte
## 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)
nedeniyle paralel olmayan dosya sistemi IO doğasına ikinci kod örneği
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 dosyasını okumada veya JSON dosyasını ayrıştırmada sorun mu var? –
Ne de. Basit bir döngü kullanmayı denediğimde makinem eninde sonunda donuyor. Her JSON girişine karşı bir işlev çalıştırmayı denedim, tekrar okumak için ayrı rds dosyalarını, vb. Kaydediyorum. Her seçenekle, bellek kullanımının da bilincindeyim ve mümkünse optimize etmeyi ve temizlemeye çalışıyorum. Bazı fikirler çok kötüydü, ama sonuçta, daha büyük veri setlerini sadece temel R ile analiz etmenin yollarını bulmak istiyorum, çünkü o an için daha iyi çözümlerin mevcut olduğu gerçeğini göz ardı ediyor. – Btibert3
Tekrarlanabilir bir örnek, geri bildirim sağlamanızı çok daha kolay hale getirebilir. –