Не удалось создать disk.frame из большого файла csv, сжатого с помощью gzip.

Я пытаюсь сделать это на ноутбуке с Windows 10 с 16 ГБ ОЗУ. Здесь также стоит упомянуть, что я установил временную папку R вне диска C :, чтобы на диске операционной системы не закончилось место, сохраняя .Renviron файл в моем Documents папку со следующими строками:

      TMPDIR=D:/rTemp 
TMP=D:/rTemp 
TEMP=D:/rTemp

Я подтвердил, что D:/rTemp папка фактически используется как временная папка, когда я работаю в RStudio.

У меня есть сжатый с помощью gzip файл csv размером ок. 20 ГБ, которые в несжатом виде занимают прибл. 83 ГБ. Я попытался создать для него следующий код:

      library(disk.frame) # set temporary directory of R outside C: drive via .Renviron
setup_disk.frame()
options(future.globals.maxSize = Inf)

fyl <- "G:/v_all_country/src/v_all_country_owner.csv.gz"
out <- "G:/v_all_country/src/v_all_country_owner.df"

col_classes_vector <- c(state_cd="factor", off_cd="factor", ... and so on for total 63 columns)

# increase the no. of recommended chunks for reduced RAM usage
no_of_chunks <- recommend_nchunks(file.size(fyl))*5

v_all_country_owner <- csv_to_disk.frame(
  fyl,
  outdir = out,
  overwrite = TRUE,
  compress = 100,
  nchunks = no_of_chunks,
  chunk_reader = "readLines", # documentation warns against data.tabe
  colClasses = col_classes_vector
)

К сожалению, я получаю сообщение об ошибке:

      Warning in if (is.character(con)) { :
  closing unused connection 3 (localhost)
Error in data.table::fread(infile, header = header, ...) : 
  Opened 83.4GB (89553459056 bytes) file ok but could not memory map it. This is a 64bit process. There is probably not enough contiguous virtual memory available.

В первый раз, когда я получил эту ошибку, я установил временный каталог R на внешний диск операционной системы. Но ошибка продолжалась и кажется, что data.table является читателем фрагментов, хотя я специально пытался использовать readLines. Такая же ошибка возникает, если я использую bigreadr как читатель фрагментов.

Тот же код отлично работает и создает файл, если он используется с более мелким файлом, сжатым с помощью gzip, размером около 200 МБ.

Затем я попытался использовать readr бэкэнд со следующим кодом:

      library(disk.frame) # set temporary directory of R outside C: drive via .Renviron
setup_disk.frame()
options(future.globals.maxSize = Inf)

fyl <- "G:/v_all_country/src/v_all_country_owner.csv.gz"
out <- "G:/v_all_country/src/v_all_country_owner.df"

# increase the no. of recommended chunks for reduced RAM usage
no_of_chunks <- recommend_nchunks(file.size(fyl))*5

csv_to_disk.frame(
  fyl,
  outdir = out,
  overwrite = TRUE,
  compress = 100,
  nchunks = no_of_chunks,
  backend = "readr",
  chunk_reader = "readLines", # documentation warns against data.table
  col_types = cols(state_cd = col_factor(), off_cd = col_factor(), ... and so on for a total of 63 columns)
)

Этот код также не смог создать disk.frame и показал следующую ошибку:

      Warning in match(x, table, nomatch = 0L) :
  closing unused connection 4 (localhost)
Warning in match(x, table, nomatch = 0L) :
  closing unused connection 3 (localhost)
Error: cannot allocate vector of size 64 Kb
Error: cannot allocate vector of size 139 Kb
Error: cannot allocate vector of size 139 Kb
Error: cannot allocate vector of size 139 Kb

Я не могу предоставить общий доступ к большому CSV-файлу из-за ограничений по размеру и конфиденциальности. Может ли кто-нибудь выяснить проблему с данным кодом и сообщением об ошибке? Любая помощь будет оценена по достоинству.

0 ответов

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