Czy możliwe jest iteracyjne przetwarzanie pojedynczego pliku tekstowego na jednej maszynie wielordzeniowej równolegle z R? W przypadku kontekstu plik tekstowy zawiera od 250 do 400 MB danych wyjściowych JSON.Czy linie odczytu mogą być wykonywane równolegle w ramach R
EDIT:
Oto niektóre przykłady kodu I zostały gry z. Ku mojemu zaskoczeniu przetwarzanie równoległe nie wygrało - tylko podstawowe lapply - ale może to być spowodowane błędem użytkownika z mojej strony. Ponadto podczas próby odczytu wielu dużych plików moja maszyna się zatarła.
## 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)
Tutaj drugi kod próbki
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))
Czy problem występuje podczas odczytu pliku JSON lub podczas analizowania pliku JSON? –
Ani. Moja maszyna ostatecznie zawiesza się, gdy próbuję użyć prostej pętli for. Próbowałem uruchomić funkcję przeciwko każdemu wpisowi JSON, zapisywać oddzielne pliki rds do odczytu z powrotem itd. Z każdą opcją, jestem również świadomy użycia pamięci i próbuję zoptymalizować i wyczyścić, kiedy to możliwe. Niektóre pomysły były okropne, ale na koniec chciałbym wymyślić sposoby na "analizowanie" większych zbiorów danych za pomocą Base R, ignorując fakt, że obecnie istnieją lepsze rozwiązania. – Btibert3
Powtarzalny przykład znacznie ułatwiłby nam przekazywanie opinii. –