【发布时间】:2013-12-12 09:32:13
【问题描述】:
我最近一直在使用 R 中的“rhdf5”包,并发现它非常有用,直到我尝试读取 190Mb 或更大的文件。特别是,我从数据库中获取数据,写入 HDF5 格式(成功,无论大小),然后稍后再读回 R。当我的文件大小超过 190Mb 时,我收到以下错误:
错误:来自 C 堆栈溢出的段错误
在我的例子中,这对应于一个大约有 1950000 行的数据框。
在阅读包文档时,我想到分块数据可能会解决问题。但是,分块似乎不适用于复合数据帧。下面是一些示例代码:
# save a matrix with chunking: works
mat = cbind(1:10, 11:20)
h5createFile("test.h5")
h5createDataset(file="test.h5", dataset="dat", dim=c(10,2), chunk=c(5,2), level=7)
h5write(mat, file="test.h5", name="dat")
# convert to data frame: won't work now
df = as.data.frame(mat)
df[,2] = as.character(mat[,2])
h5createFile("test2.h5")
h5createDataset(file="test2.h5", dataset="dat", dim=c(10,2), chunk=c(5,2), level=7)
h5write(df, file="test2.h5", name="dat")
#h5write(df, file="test2.h5", name="dat", index=list(1:10, 1:2))
# try to use alternate function
fid = H5Fcreate("test3.h5")
h5createDataset(file="test3.h5", dataset="dat", dim=c(10,2), chunk=c(5,2), level=7)
h5writeDataset.data.frame(df, fid, name="dat", level=7, DataFrameAsCompound=FALSE)
#h5writeDataset.data.frame(df, fid, name="dat", level=7, DataFrameAsCompound=FALSE, index=list(1:10,1:2))
分块可能无济于事。无论哪种方式,如果有人对将大型 HDF5 文件读入 R 有建议,我将不胜感激。
【问题讨论】:
-
对于像这样的问题,如果包似乎存在编码问题,似乎包维护者是最好的联系人 - 他们有兴趣了解并解决这个问题.
packageDescription('rhdf5')$Maintainer