Я должен прочитать большой CSV-файл (5,4 ГБ с 7 млн строк и 205 столбцов) в R. Я успешно прочитал его, используя data.table::fread(). Но я хочу знать, можно ли прочитать это, используя базовый read.csv()?
Я пытался просто использовать грубую силу, но моя 16 ГБ ОЗУ не может этого выдержать. Затем я попытался использовать стратегию «разделяй и властвуй» (дробление), как показано ниже, но это все равно не сработало. Как мне это сделать?
dt1 <- read.csv('./ss13hus.csv', header = FALSE, nrows = 721900, skip =1)
print(paste(1, 'th chunk completed'))
system.time(
for (i in (1:9)){
tmp = read.csv('./ss13hus.csv', header = FALSE, nrows = 721900, skip = i * 721900 + 1)
dt1 <- rbind(dt1, tmp)
print(paste(i + 1, 'th chunk completed'))
}
)
Также я хочу знать, как работает fread(), который может считывать все данные сразу и очень эффективно, независимо от памяти или времени?
rbind— это всегда плохо: каждый раз, когда она добавляет что-нибудь, R делает полную копию предыдущих данных. Для предыдущих сборок я предпочитаюdo.call(rbind.data.frame, lapply(fnames, read.csv)), но я не уверен, что это решит вашу проблему с большими данными. Если это не сработает, вы можете рассмотреть возможность обработки только части данных за раз, агрегировать их (?), сохранить и перейти к следующему пакету. - person r2evans   schedule 15.04.2019?freadи руководство. - person smci   schedule 15.04.2019