R bigmemory 不会读取大的 csv 文件
Posted
技术标签:
【中文标题】R bigmemory 不会读取大的 csv 文件【英文标题】:R bigmemory won't read large csv file 【发布时间】:2016-05-29 13:53:01 【问题描述】:我正在尝试使用 R biganalytics
包中的 read.big.matrix
以类似于 Vignette for bigmemory 的方式加载 689.4 MB 的 csv。
小插曲代码:
library(bigmemory)
library(biganalytics)
x <- read.big.matrix("airline.csv", type="integer", header=TRUE,
backingfile="airline.bin",
descriptorfile="airline.desc",
extraCols="Age")
根据 42- 的评论,我在命令行 cut -d, -f9,11,17,18,23 --complement 2008.csv > 2008cut.csv
上使用 cut 删除了因子变量
然后,我使用 sed sed -i 's/NA/0/g' 2008cut.csv
删除了在数据中发现的任何 NA 值,即使使用这些预处理步骤,我也会收到相同的错误。
我的代码:
#This works
x <- read.csv("~/Downloads/2008cut.csv",header=T)
dim(y)
#[1] 7009728 29
length(complete.cases(x))
#[1] 7009728
library(bigmemory)
library(biganalytics)
#This errors out
data <- read.big.matrix("~/Downloads/2008cut.csv",
type="integer", header=TRUE)
我在尝试运行 read.big.matrix 时收到以下错误:
Warning: stack imbalance in '.Call', 31 then 32
Warning: stack imbalance in '', 28 then 29
Warning: stack imbalance in '-', 23 then 24
Warning: stack imbalance in '-', 22 then 23
Warning: stack imbalance in '<-', 20 then 21
Error in big.matrix(nrow = numRows, ncol = createCols, type = type,
dimnames = list(rowNames, :
A big.matrix must have at least one row and one column
我发现其他人有这个问题,但他们有 mixed data 或 similar problem 但没有回应。在我搜索的某个时间点,邮件列表中的某个人询问用户是否可以运行x <- big.matrix(nrow=1000,ncol=10)
之类的东西来确保 bigmemory 正常工作。我我能够运行该代码并生成一个 big.matrix。
任何指导将不胜感激!
软件详情:
数据:2008 File R:3.2.3 操作系统:x86_64-pc-linux-gnu 大内存:4.5.19 biganalytics:1.1.14【问题讨论】:
你的问题是内存限制的问题还是你只是想提高读取.csv
文件的速度?
链接页面上文件结构的文档表明,为该文件选择“整数”不会成功。有些列显然不是整数。
@RafaelPereira 我试图更好地理解 bigmemory 库及其应用程序。我正在使用 32 GB 的 RAM,因此文件适合内存,但我想在 bigmemory 框架下探索数据。 @42- 好点。我最初用亚马逊文件尝试过这个。即使使用cut -d, -f9,11,17,18,23 --complement 2008.csv > 2008cut.csv
删除因子变量后,我也收到相同的错误:-\
read.big.matrix
位于 bigmemory
而不是 biganalytics
。不幸的是,我无法重现这一点,它在我的 linux (Ubuntu 14.04) 机器上没有问题。也许您可以向其他开发人员提交issue,他们可能会有想法。
【参考方案1】:
对于读取大文件,我建议使用 R data.table
包中的 fread
。
【讨论】:
这并没有解决问题,是吗? 看起来生成的表适用于 biglm 等工具,但不适用于 bigkmeans。 fread 似乎将整个文件加载到内存中,而 bigmemory 将指针存储在内存中。【参考方案2】:使用绝对路径:
absolutePath <- normalizePath("~/Downloads/2008cut.csv")
x <- read.big.matrix(absolutePath, type="integer", header=TRUE,
backingfile="airline.bin",
descriptorfile="airline.desc",
extraCols="Age")
【讨论】:
以上是关于R bigmemory 不会读取大的 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章
R 中的 fread 将一个大的 .csv 文件导入为一行的数据框
使用 Python 或 R 将非常大的 sql 文件导出到 csv