gpt4 book ai didi

r - Vroom/fread 不会读取大 .csv 文件 - 无法内存映射它

转载 作者:行者123 更新时间:2023-12-04 14:05:32 28 4
gpt4 key购买 nike

我有一个 .csv文件大小为 112GB 但都不是 vroom也不是 data.table::fread会打开它。即使我要求读取 10 行或几列,它也会提示映射错误:无法分配内存。

    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 行?

最佳答案

这个事情已经被data.table的主创讨论过了包裹在 https://github.com/Rdatatable/data.table/issues/3526 .请参阅 Matt Dowle 本人的评论 https://github.com/Rdatatable/data.table/issues/3526#issuecomment-488364641 .据我了解,问题的要点是从一个巨大的 csv 文件中读取甚至 10 行 fread , 整个文件需要进行内存映射 .所以fread如果您的 csv 文件对于您的机器来说太大,则不能单独使用。如果我错了,请纠正我。
另外,我无法使用 vroom使用超过 RAM 的大 csv 文件。任何指向此目的的指针将不胜感激。
对我来说,检查一个巨大的(gzipped)csv 文件的最方便的方法是使用一个小的命令行工具 csvtk来自 https://bioinf.shenwei.me/csvtk/
例如,检查尺寸

csvtk dim BigFile.csv.gz
并且,检查前 100 行的头部
csvtk head -n100 BigFile.csv.gz
更好地了解上面的情况
csvtk head -n100 BigFile.csv.gz | csvtk pretty | less -SN
这里我用过 lesshttps://github.com/bmatzelle/gow 处的“Gnu On Windows”中可用的命令
警告 - 许多人建议使用命令
wc -l BigFile.csv
检查没有。的 lines从一个大的csv文件。在大多数情况下,它将等于否。的 rows .但如果大 csv 文件包含换行符 单元格内 , 使用电子表格术语,上面的命令不会显示 no。的 rows .在这种情况下,没有。的 lines与编号不同。的 rows .所以建议使用 csvtk dimcsvtk nrow .其他 csv 命令行工具,如 xsv , miller也会显示正确的结果。
另一个警告 - 短命令 fread(cmd="head -n 10 BigFile.csv")如果某些列包含 ,不建议预览前几行重要的前导零 在 0301、0542 等数据中,因为没有列指定, fread将它们解释为整数,而不显示这些列中的前导零。例如,在我必须分析的某些数据库中,特定列中的第一个数字零表示它是 Revenue Receipt .所以最好使用像 csvtk 这样的命令行工具, miller , xsvless -SN用于预览一个大的 csv 文件,该文件“按原样”显示文件,而没有任何潜在的错误解释。
PS1:默认情况下,即使是像 MS Excel 和 LibreOffice Calc 这样的电子表格也会丢失 csv 文件中的前导零。 LibreOffice Calc 实际上在预览窗口中显示前导零,但在您加载文件时会丢失它们!我还没有找到默认情况下不会在 csv 文件中丢失前导零的电子表格。
PS2:我已经在 https://stackoverflow.com/a/68693819/8079808 上发布了查询非常大的 csv 文件的方法
编辑:
VROOM 在处理大文件时确实有困难,因为它需要将索引以及从文件中读取的任何数据存储在内存中。见开发线程 https://github.com/r-lib/vroom/issues/203

关于r - Vroom/fread 不会读取大 .csv 文件 - 无法内存映射它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68663834/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com