微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法创建大型 gzipped csv 文件的 `disk.frame`

如何解决无法创建大型 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?