【发布时间】:2018-02-19 20:25:42
【问题描述】:
我正在处理大型 csv 文件 (~500-700MB),因此我正在逐块读取它们。我尝试了 read.csv() 函数,但是随着要跳过的行数的增加,它非常慢,所以我发现data.table::fread() 是一种更快的读取文件的方法。(R-Blogger 和 stackOverflow)但是当我在使用 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,880k和rstudio = 160,328k在崩溃后rstudio = 157,060k和rsession = 66,196k在崩溃并从任务管理器窗口消失之前。我不认为 RAM 利用率是个问题,因为我可以使用read.csv()和read.csv.raw()读取 500MB-700MB 的 csv 文件 -
好吧,我猜在你的集合中的几行之后有问题。
fread被认为是敏感的。您应该控制大文件中没有缺少分隔符,也没有特殊字符。 -
关于缺少分隔符,这是一个完全正常的反声明
rawData <- read.csv("Bund001.csv",sep = ",",nrows = chSize,skip = nskip,col.names = ColNamesVector) -
那么有什么方法可以解决这个问题,或者有其他更快的方法来读取 csv 文件吗?
标签: r csv data.table