【问题标题】:data.table::fread() is crashing for bigger csv filesdata.table::fread() 对于更大的 csv 文件会崩溃
【发布时间】:2018-02-19 20:25:42
【问题描述】:

我正在处理大型 csv 文件 (~500-700MB),因此我正在逐块读取它们。我尝试了 read.csv() 函数,但是随着要跳过的行数的增加,它非常慢,所以我发现data.table::fread() 是一种更快的读取文件的方法。(R-BloggerstackOverflow)但是当我在使用 fread() 读取一个 60MB csv 文件,它工作正常 但是当我在相同类型的更大文件(~450MB)上尝试它时,它显示 R Session Aborted 两个文件的结构相同,只是大小不同。我无法理解为什么它不起作用,因为人们正在使用它读取更大的文件。

这是我的代码 sn-p-

library(data.table)
ffName = "Bund001.csv"

s<- Sys.time()


ColNamesVector <<- c("RIC","Date","Time","GMT_Offset","Type","Price","Volume","Bid_Price","Bid_Size","Ask_Price","Ask_Size","Qualifiers")


rawData <- fread(ffName,sep=",",nrows = 100000,skip = 400000,col.names = ColNamesVector)



print(Sys.time()-s)

【问题讨论】:

  • 您能否在崩溃前跟踪 RAM 使用情况?你的电脑有多少内存?
  • 目前 8GB RAM 安装在我的 PC 中,在运行脚本之前,它是 rsession = 65,880krstudio = 160,328k 在崩溃后 rstudio = 157,060krsession = 66,196k 在崩溃并从任务管理器窗口消失之前。我不认为 RAM 利用率是个问题,因为我可以使用 read.csv()read.csv.raw() 读取 500MB-700MB 的 csv 文件
  • 好吧,我猜在你的集合中的几行之后有问题。 fread 被认为是敏感的。您应该控制大文件中没有缺少分隔符,也没有特殊字符。
  • 关于缺少分隔符,这是一个完全正常的反声明rawData &lt;- read.csv("Bund001.csv",sep = ",",nrows = chSize,skip = nskip,col.names = ColNamesVector)
  • 那么有什么方法可以解决这个问题,或者有其他更快的方法来读取 csv 文件吗?

标签: r csv data.table


【解决方案1】:

你先检查NEWS了吗? (其他提示在data.table上Support page。)

您问题中包含的屏幕截图显示您使用的是 1.10.4。幸运的是,目前 NEWS 显示从那时起对fread 进行了 14 项改进,其中许多与您的问题相关。请尝试开发。 installation page 解释了为您制作的 Windows 预编译二进制文件以及如何获取它。您无需安装任何工具。该页面解释说,如果它不起作用,您可以轻松恢复。

请尝试来自 dev 的 v1.10.5,如果可以解决问题,请接受此答案。

【讨论】:

  • 非常感谢您的回答,但我目前正在实习,这些人为我们屏蔽了 GitHub,由于某些其他人无法理解的原因:P。我使用install.packages() 从 CRAN 安装了 v1.10.4(我的 R 上的当前版本)。我会在周末试用 v1.10.5 并及时回复您,再次感谢。
  • @AbhinavRawat 我的同情。也许您可以使用手机查看主页。这是预编译的 Windows 二进制文件(当前为 1.10.5)的直接链接:ci.appveyor.com/api/buildjobs/g0hw382c9i9iuujj/artifacts/…
  • 我对@9​​87654327@ 有同样的问题。它适用于nrows = 900000,但不适用于nrows = 1000000。它还会导致 R 会话中止。我正在使用 R 3.6.2。和data.table 1.12.8。我让它与 read.csv2 一起使用(muck 更慢 ofc)。
【解决方案2】:

这与大小无关,这意味着您的 CSV 有点不合规格。

我建议尝试readr,它有点慢但更能容忍错误

https://github.com/tidyverse/readr

【讨论】:

    猜你喜欢
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2019-11-13
    • 2018-02-02
    • 2017-01-30
    相关资源
    最近更新 更多