R과 병행하여 단일 멀티 코어 시스템의 단일 텍스트 파일을 반복 할 수 있습니까? 컨텍스트의 경우 텍스트 파일은 250-400MB 사이의 JSON 출력 사이에 있습니다.R 내에서 병렬로 readLine을 실행할 수 있습니까?
편집 :
다음은 내가 놀았 던 몇 가지 코드 샘플입니다. 놀랍게도, 병렬 처리가 성공하지 못했습니다 - 단지 기본 응용 프로그램 - 그러나 이것은 내 부분의 사용자 오류 때문일 수 있습니다. 또한 많은 수의 큰 파일을 읽으려고 할 때 내 컴퓨터가 막혔습니다. 여기
## 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)
인해 비 병렬 파일 시스템 IO의 성격에 두 번째 코드 샘플
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
재생산 가능한 예제는 우리가 피드백을 제공하는 것이 훨씬 쉬워 질 것입니다. –