首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vroom/fread无法读取大型.csv文件-无法对其进行内存映射

Vroom/fread无法读取大型.csv文件-无法对其进行内存映射
EN

Stack Overflow用户
提问于 2021-08-05 09:19:11
回答 1查看 287关注 0票数 4

我有一个112 it的.csv文件,但是vroomdata.table::fread都不能打开它。即使我请求读入10行或几列,它也会报告映射错误:无法分配内存。

代码语言:javascript
复制
    df<-data.table::fread("FINAL_data_Bus.csv", select = c(1:2),nrows=10)
System errno 22 unmapping file: Invalid argument
Error in data.table::fread("FINAL_data_Bus.csv", select = c(1:2), nrows = 10) : 
  Opened 112.3GB (120565605488 bytes) file ok but could not memory map it. This is a 64bit process. There is probably not enough contiguous virtual memory available.

另一方面,read.csv会很高兴地读到这十行。

为什么vroomfread不能使用通常的altrep来读取它,即使是10行?

EN

回答 1

Stack Overflow用户

发布于 2021-08-10 02:31:08

据我所知,问题的要点是,即使用fread从一个巨大的csv文件中读取10行代码,整个文件也需要进行内存映射。因此,如果您的csv文件对于您的机器来说太大,则不能单独使用fread。如果我说错了,请纠正我。

此外,我还不能使用vroom处理大于RAM的大文件。任何指向这一目标的建议都将不胜感激。

对我来说,检出一个巨大的(用gzipped压缩的) csv文件最方便的方法是使用https://bioinf.shenwei.me/csvtk/的一个小命令行工具csvtk

例如,使用检查尺寸

代码语言:javascript
复制
csvtk dim BigFile.csv.gz

并且,查看前100行的head

代码语言:javascript
复制
csvtk head -n100 BigFile.csv.gz

更好地了解以上内容

代码语言:javascript
复制
csvtk head -n100 BigFile.csv.gz | csvtk pretty | less -SN

在这里,我使用了https://github.com/bmatzelle/gow上的"Gnu On Windows“提供的less命令

代码语言:javascript
复制
wc -l BigFile.csv

去检查一下没有。从一个很大的csv文件中提取lines。在大多数情况下,它将等于no。rows的。但是如果大的csv文件在单元格中包含换行符,为了使用电子表格术语,上面的命令不会显示no。rows的。在这种情况下,没有。lines不同于no.rows的。因此,建议使用csvtk dimcsvtk nrow。其他csv命令行工具,如xsvmiller也将显示正确的结果。

另一句话要注意-如果某些列在数据中包含重要的前导零,例如0301,0542等,则不建议使用短命令fread(cmd="head -n 10 BigFile.csv")预览前几行,因为如果没有列规范,fread将把它们解释为整数,并且不会显示这些列的前导零。例如,在我必须分析的一些数据库中,特定列中的第一个数字0表示它是一个Revenue Receipt。所以最好使用命令行工具,如csvtkmillerxsvless -SN来预览一个大的csv文件,它显示文件“按原样”而不会有任何潜在的错误解释。

csv :默认情况下,即使是MS Excel和LibreOffice Calc这样的电子表格也会丢失csv文件中的前导零。LibreOffice计算实际上会在预览窗口中显示前导零,但在加载文件时会丢失它们!我还没有找到默认情况下csv文件中不会丢失前导零的电子表格。

编辑:

VROOM在处理大文件时确实有困难,因为它需要将索引以及从文件中读取的任何数据存储在内存中。请参阅开发线程https://github.com/r-lib/vroom/issues/203

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68663834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档