R ff包:2Gb限制?

时间:2017-11-10 14:58:41

标签: r bigdata ff

我有一个5G行的数据集,太大而无法在R-base中导入。我的理解是this limit源于在向量上使用32位索引。因此,即使在64位版本的R中,也允许高达2 ^ 31-1的向量。

所以我正在探索 ff包。据说这个包装能够处理大型的包装。例如,数据集herehere

但是当达到第2~32行时它会中断。我错过了什么吗?

library(ff)

probas.ff <- read.csv.ffdf(file="result.csv.gz"
                           ,header=FALSE
                           ,colClasses=c('numeric')
                           ,col.names=c('proba')
                           ,first.rows=100000
                           ,VERBOSE=TRUE
                           )

这会产生以下错误:

read.table.ffdf 2143389345..2145486496 (2097152)  csv-read=0.498sec ffdf-write=0.02sec
read.table.ffdf 2145486497..NA (2097152)  csv-read=0.411sec
Error in if (v1 == d1) return(x) : missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In N + n : NAs produced by integer overflow
2: In nff + n : NAs produced by integer overflow

仅供参考,作为B计划,我使用分离和征服策略使用RMySQL 运行良好但代码有点难看(欢迎评论)。作为第一步,我只想绘制直方图。

library(RMySQL)
con <- dbConnect(RMySQL::MySQL(), dbname = "blah")

rs1 <- dbSendQuery(con, "SELECT proba FROM xxx LIMIT 0,1999999999")
data1 <- dbFetch(rs1, n=-1)

rs2 <- dbSendQuery(con, "SELECT proba FROM xxx LIMIT 2000000000,1999999999")
data2 <- dbFetch(rs2, n=-1)

rs3 <- dbSendQuery(con, "SELECT proba FROM xxx LIMIT 4000000000,1999999999")
data3 <- dbFetch(rs3, n=-1)

breaks <- seq(0,1,0.001)

h1 <- hist(data1$proba,breaks=breaks,plot=FALSE)
h2 <- hist(data2$proba,breaks=breaks,plot=FALSE)
h3 <- hist(data3$proba,breaks=breaks,plot=FALSE)

all.counts <- as.double(h1$counts) + as.double(h2$counts) + as.double(h3$counts)

png("hist.png")
barplot(all.counts)
dev.off()

0 个答案:

没有答案