Невозможно выделить вектор размером n Ошибка - Импорт данных ссуды Фанни Мэй на одну семью в R - PullRequest
0 голосов
/ 06 июля 2018

Я пытался загрузить данные о кредите Fannie Mae в R, которые доступны в формате "txt" с их сайта (https://loanperformancedata.fanniemae.com/lppub/index.html#) Я использую код импорта данных, предоставленный ими, но я сталкиваюсь с ошибкой "не могу выделить вектор размером n mb" На данный момент я только пытаюсь прочитать и повторно привязать 4 файла ( каждые 600-700 Мб. ), но мне нужно сделать это еще для многих. Я использую ноутбук с 8GB RAM и 64-bit RStudio. Любые предложения о том, что делать? Код использует «fread» вместе с doMC / doParallel, и, насколько я понимаю, это настолько эффективно, насколько это возможно.

Вот код:

library(doMC) 

registerDoMC(30)

Performance_Data <- foreach(k=1:numberofcores, .inorder=FALSE, .combine=rbind,
                        .packages=c("data.table")) %do% {
                          Data_P<- fread(Performance[k], sep = "|", colClasses=Performance_ColClasses, showProgress=TRUE)
                          setnames(Data_P, Performance_Variables)
                          setkey(Data_P, "LOAN_ID")
                        }

1 Ответ

0 голосов
/ 06 июля 2018

Как уже указывалось в комментариях, ваша проблема заключается в нехватке доступной памяти. Это может показаться вам неожиданным, поскольку у вас 8 ГБ ОЗУ. Однако для txt-файлов размером более 100 МБ этого может быть недостаточно, даже если вы не идете параллельно (что приводит к дополнительным затратам памяти).

У меня есть пример того, что я недавно попробовал. Поскольку данные, которые вы описываете, не доступны без учетной записи, это может иметь больше смысла, чтобы показать здесь:

library("data.table")
download.file(url = "http://download.geonames.org/export/dump/allCountries.zip",
              destfile = "allCountries.zip",
              mode = "wb",
              cacheOK = FALSE,
              extra = character())
unzip(zipfile = "allCountries.zip")

Эти первые несколько строк просто скачивают и разархивируют .txt с данными. Обратите внимание, что размер распакованного .txt файла составляет 1,4 ГБ.

geonames <- fread("allCountries.txt", 
                  quote = "",
                  sep = "\t",
                  col.names = c(
                    "geonameid",
                    "name",
                    "asciiname",
                    "alternatenames",
                    "latitude",
                    "longitude",
                    "feature class",
                    "feature code",
                    "country code",
                    "cc2",
                    "admin1 code",
                    "admin2 code",
                    "admin3 code",
                    "admin4 code",
                    "population",
                    "elevation",
                    "dem",
                    "timezone",
                    "modification date"
                  ))

format(object.size(geonames), units = "GiB")
#> [1] "2.9 Gb"

Как вы можете видеть, размер файла увеличился более чем в два раза после того, как он был прочитан в R. Для чтения из четырех файлов размером 700 МБ вам потребуется 5,6 ГБ доступной оперативной памяти. В Windows это может быть проблемой, в зависимости от того, что еще работает в фоновом режиме. Вы можете подумать о том, чтобы прочитать файлы по одному, сохранить их как файлы .RDS, а затем объединить их вместе. Но это не изменит тот факт, что вы не можете открыть все данные в R одновременно.

Я бы посоветовал взглянуть на пакет dbplyr и сохранить ваши данные, например, в базе данных SQLite. Чтобы пойти дальше, нужно прочитать файлы по одному и записать данные в базу данных. Таким образом, вы можете запросить данные, которые вам нужны, когда вам это нужно. Или получить больше оперативной памяти. Это также помогло бы.

...