Какой самый быстрый способ и самый быстрый формат для загрузки больших наборов данных в R

У меня большой набор данных (около 13 ГБ без сжатия), и мне нужно загружать его повторно. Первая загрузка (и сохранение в другом формате) может быть очень медленной, но каждая загрузка после этого должна быть максимально быстрой. Какой самый быстрый способ и самый быстрый формат для загрузки набора данных?

Я подозреваю, что оптимальный выбор это что-то вроде

 saveRDS(obj, file = 'bigdata.Rda', compress = FALSE)
 obj <- loadRDS('bigdata.Rda)

Но это кажется медленнее, чем при использовании fread функция в data.table пакет. Это не должно быть так, потому что fread преобразует файл из CSV (хотя, по общему признанию, он сильно оптимизирован).

Некоторые временные параметры для набора данных ~800 МБ:

> system.time(tmp <- fread("data.csv"))
Read 6135344 rows and 22 (of 22) columns from 0.795 GB file in 00:00:43
     user  system elapsed 
     36.94    0.44   42.71 
 saveRDS(tmp, file = 'tmp.Rda'))
> system.time(tmp <- readRDS('tmp.Rda'))
     user  system elapsed 
     69.96    2.02   84.04

Предыдущие вопросы

Этот вопрос связан, но не отражает текущее состояние R, например, ответ предполагает, что чтение из двоичного формата всегда будет быстрее, чем текстовый формат. Предложение использовать *SQL также не помогает в моем случае, так как требуется весь набор данных, а не только его подмножество.

Есть также связанные вопросы о самом быстром способе загрузки данных один раз (например: 1).

1 ответ

Это зависит от того, что вы планируете делать с данными. Если для какой-то операции вам нужны все данные в памяти, то, я думаю, вам лучше всего использовать fread или readRDS (размер файла для данных, сохраненных в RDS, намного меньше, если это важно для вас).

Если вы будете выполнять сводные операции с данными, я обнаружил, что однократное преобразование в базу данных (с использованием sqldf) будет гораздо лучшим вариантом, так как последующие операции выполняются намного быстрее при выполнении SQL-запросов к данным, но это также потому, что я не надеваю недостаточно оперативной памяти для загрузки 13 ГБ файлов в память.

Другие вопросы по тегам