Có thể lặp qua một tệp văn bản trên một máy đa lõi song song với R không? Đối với ngữ cảnh, tệp văn bản nằm trong khoảng từ 250-400MB đầu ra JSON.Có thể readLines được thực hiện song song trong R
CHỈNH SỬA:
Dưới đây là một số mẫu mã mà tôi đang chơi cùng. Trước sự ngạc nhiên của tôi, việc xử lý song song đã không giành chiến thắng - chỉ cơ bản lapply - nhưng điều này có thể là do lỗi người dùng trên một phần của tôi. Ngoài ra, khi cố đọc một số tệp lớn, máy của tôi bị nghẹt thở.
## 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)
Đây là một mẫu mã thứ hai
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))
Có phải vấn đề khi đọc tệp JSON hoặc phân tích cú pháp tệp JSON không? –
Không. Máy của tôi cuối cùng bị đóng băng khi tôi cố gắng sử dụng một vòng lặp đơn giản. Tôi đã cố gắng chạy một hàm chống lại mỗi mục nhập JSON, lưu các tệp rds riêng biệt để đọc lại, v.v. v.v. Với mọi tùy chọn, tôi cũng ý thức được việc sử dụng bộ nhớ và cố gắng tối ưu hóa và làm sạch khi có thể. Một số ý tưởng là khủng khiếp, nhưng cuối cùng, tôi muốn tìm ra cách để "phân tích" tập dữ liệu lớn hơn chỉ với Base R, bỏ qua thực tế là các giải pháp tốt hơn tồn tại trong thời điểm này. – Btibert3
Ví dụ có thể tái sản xuất sẽ giúp chúng tôi cung cấp phản hồi dễ dàng hơn nhiều. –