如何解决无法创建大型 gzipped csv 文件的 `disk.frame`
我正在具有 16 GB RAM 的 Windows 10 笔记本电脑上尝试此操作。这里还值得一提的是,我已经将 R 的临时文件夹设置在 C: 驱动器之外,这样操作系统驱动器就不会因为在我的 .Renviron
文件夹中保留一个 Documents
文件而耗尽空间使用以下几行:
TMPDIR=D:/rTemp
TMP=D:/rTemp
TEMP=D:/rTemp
我已经验证,当我在 RStudio 中工作时,D:/rTemp
文件夹实际上被用作临时文件夹。
我有一个大约的 gzip 压缩 csv 文件。 20 GB,如果未压缩大约会占用。 83 GB。我尝试使用以下代码为其创建 disk.frame
:
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
作为块读取器,也会发生同样的错误。
如果与大约 200 MB 的较小的 gzip 压缩文件一起使用,则相同的代码可以完美运行并创建一个 disk.frame
。
然后我尝试使用带有以下代码的 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,backend = "readr",# 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,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 文件。任何人都可以找出给定代码和错误消息的问题吗?任何帮助将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。