对大列向量使用 `fread()` 的内存要求
Memory requirement using `fread()` for large column vector
我有一个人类可读的文件,其中包含 10 亿个双打,全部写在一行(10 亿列)中。
文件本身只有8G左右,我用的是
fread("filename.data", sep=" ", header=FALSE, data.table=TRUE, showProgress=TRUE)
将它们加载到 R 会话中。该脚本将始终是 "Killed",我从 showProgress
获得的最多信息是
* caught segfault * address 0x7efc7bed2010, cause 'memory not
mapped'
我过去使用相同的方法加载了更大的文件(原始大小),但可能在 "matrix form" 中并且列数更少。我猜 data.table 需要存储 10 亿个列名,这会占用大量内存……这是正确的吗?
- 有没有办法
fread
直接进入行向量(而不是读取后转置)?
- 此数据是否可以挽救,或者我是否需要将其重写为行向量?
将单行读作单列?
给你..
library(data.table)
#read using default separators
fread('v1,v2,v2,v3
this, is, a, test
of, fread,one,line')
# v1 v2 v2 v3
# 1: this is a test
# 2: of fread one line
#read one column per line/row
fread('v1,v2,v2,v3
this, is, a, test
of, fread,one,line', sep = "", header = FALSE)
# V1
# 1: v1,v2,v2,v3
# 2: this, is, a, test
# 3: of, fread,one,line
我有一个人类可读的文件,其中包含 10 亿个双打,全部写在一行(10 亿列)中。
文件本身只有8G左右,我用的是
fread("filename.data", sep=" ", header=FALSE, data.table=TRUE, showProgress=TRUE)
将它们加载到 R 会话中。该脚本将始终是 "Killed",我从 showProgress
获得的最多信息是
* caught segfault * address 0x7efc7bed2010, cause 'memory not mapped'
我过去使用相同的方法加载了更大的文件(原始大小),但可能在 "matrix form" 中并且列数更少。我猜 data.table 需要存储 10 亿个列名,这会占用大量内存……这是正确的吗?
- 有没有办法
fread
直接进入行向量(而不是读取后转置)? - 此数据是否可以挽救,或者我是否需要将其重写为行向量?
将单行读作单列?
给你..
library(data.table)
#read using default separators
fread('v1,v2,v2,v3
this, is, a, test
of, fread,one,line')
# v1 v2 v2 v3
# 1: this is a test
# 2: of fread one line
#read one column per line/row
fread('v1,v2,v2,v3
this, is, a, test
of, fread,one,line', sep = "", header = FALSE)
# V1
# 1: v1,v2,v2,v3
# 2: this, is, a, test
# 3: of, fread,one,line