Не удалось создать 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-файлу из-за ограничений по размеру и конфиденциальности. Может ли кто-нибудь выяснить проблему с данным кодом и сообщением об ошибке? Любая помощь будет оценена по достоинству.