проблемы выделения памяти при объединении двух больших наборов данных в r - PullRequest
1 голос
/ 19 февраля 2020

Мне нужно объединить два относительно больших набора данных в R. A имеет 651 052 наблюдения и 118 переменных , а B содержит 38 208 наблюдений и 41 переменную , и я, буквально, не могу уменьшить размер данных дальше. Применение функции object.size() показывает, что эти два набора данных занимают 610 МБ и 13 МБ в памяти соответственно.

Используемая мной машина имеет 64-разрядный процессор и 32 ГБ оперативной памяти. Тем не менее, при попытке объединить эти файлы R выдает ошибки выделения памяти: Error: cannot allocate vector of size x Mb! Я проверил похожие посты на SO и перепробовал многие из предложенных решений, но ни одно из них не было эффективным в моем случае: я проверил ограничение памяти с помощью memory.limit(), который возвращает 32684, который показывает, что R имеет доступ к максимально доступной памяти на моем компьютере. Кроме того, использование функции merge из пакета data.table также не решило проблему и вызвало ошибку выделения памяти.

Мне удалось разделить A на две части и объединить (что на самом деле left_join) каждую часть отдельно с B после процедуры удара:

# open fresh R session

load(A)
load(B)

part_1 <- left_join(first_half_A, B)
save(part_1)

# close R
# re-open R

load(A)
load(B)

part_2 <- left_join(second_half_A, B)
save(part_2)

# close R

Получающиеся части занимают около 200 Mb на диске, но когда я загружаю их в R, они резко увеличиваются в размерах и занимают почти 25 Gb, что, вопреки моим надеждам, чтобы эти части имели более управляемые размеры при перезагрузке в R таким образом не позволяет мне загружать их оба, поэтому я могу комбинировать их, используя bind_rows.

Учитывая, что добавление дополнительной оперативной памяти или использование платформ, таких как AWS, не будет возможным, что вы предлагаете преодолеть эту проблему? Решение, которое не должно входить в мир SQL, высоко ценится.

PS. ниже вы можете увидеть вывод sessionInfo() на моей машине:

> sessionInfo()
R version 3.6.2 (2019-12-12)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 16299)

Matrix products: default

locale:
[1] LC_COLLATE=English_Netherlands.1252  LC_CTYPE=English_Netherlands.1252    LC_MONETARY=English_Netherlands.1252 LC_NUMERIC=C                        
[5] LC_TIME=English_Netherlands.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base    

loaded via a namespace (and not attached):
[1] compiler_3.6.2 tools_3.6.2    knitr_1.28     xfun_0.12  

Первое обновление

Что помогло мне совершить sh слияние было изменить тип некоторых переменных, где это возможно, в основном от numeric до integer, что приводит к дальнейшему уменьшению размера данных. Тем не менее, проблема выделения памяти по-прежнему остается в виде объединенного набора данных, который содержит 47M строк и 124 переменных, а занимает всего 235 МБ на диске, занимает все 32 ГБ ОЗУ при загрузке в сеансе fre sh R и не оставляет больше пространство для предстоящих анализов, которые также тяжелы в вычислительном отношении, такие как оценка нескольких смешанных моделей. Буду очень признателен за любые предложения, касающиеся этой ситуации, которые помогут мне продолжить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...