Производительность уникальной базы против data.table - PullRequest
0 голосов
/ 08 ноября 2018

У меня довольно большой набор данных (4,7 млн ​​строк и 42 переменных). Когда я пытаюсь сохранить это на общем диске, над которым я работаю, saveRDS Windows выдает сообщение об ошибке, но меньшие наборы данных сохраняются без проблем. Чтобы ответить на этот вопрос, я решил нормализовать свои данные и сохранить соответствующие данные измерений и фактов.

После извлечения столбцов, определяющих одно измерение данных, моим следующим шагом было удалить дублирование в измерении с помощью unique, но выполнить

dim_data <- unique(dim_data)

заставил мою сессию довольно долго зависать перед возвратом с сообщением об ошибке

Ошибка: память исчерпана (предел достигнут?)

Ошибка при переносе: невозможно выделить вектор размером 127,6 Мб

(на моей машине 16 ГБ ОЗУ).

Я боролся с этим некоторое время, прежде чем пытаться

dim_data <- as.data.table(dim_data)
dim_data <- unique(dim_data)

В этот момент вторая строка выполняется мгновенно и успешно.

Я счастлив, что у меня есть решение, и я понимаю, что другая версия unique называется в зависимости от класса ее аргумента , но что объясняет неспособность unique к даже завершить свои вычисления применительно к кадрам данных, которые превышают определенный размер? Является ли базовая реализация крайне неэффективной, и если да, то известно ли это и запланировано ли исправление (я не смог найти ничего о производительности unique)? И наоборот, меньше ли это о реализации функции data.table и больше о том, как объекты data.table хранятся более разумно за кулисами?

...