在第一列的 R 中查询内存不足 60gb tsv,哪个数据库/方法?

Posted

技术标签:

【中文标题】在第一列的 R 中查询内存不足 60gb tsv,哪个数据库/方法?【英文标题】:Querying out of memory 60gb tsv's in R on the first column, which database/method? 【发布时间】:2019-02-15 20:47:43 【问题描述】:

我有 6 个 60gb(未压缩)的大型 tsv 矩阵,包含 2000 万行 x 501 列:第一个索引/整数列基本上是行号(因此甚至没有必要),500 列是数字列(浮点数,4 位小数,例如1.0301)。所有 tsv 具有相同数量的相互对应的行。

我需要提取行号上的行。

我需要提取最多 5,000 个连续行或最多 500 个非连续行;所以不是数百万。希望也有某种压缩来减少 60gb 的大小,所以也许没有 SQL?最好的方法是什么?

我尝试的一种方法是将它们分成 100 个 gzip 压缩文件,使用 tabix 对其进行索引,然后查询它们,但这对于我的需要来说太慢了(500 个随机行需要 90 秒)。

我阅读了 ff 包,但没有找到如何按第一列索引?

还有其他方法吗?

非常感谢。

【问题讨论】:

【参考方案1】:

我将使用来自data.table 包的fread()

使用参数skipnrows,您可以使用要读取的起始行(skip)或要读取的行数(nrows

如果您想探索tidyverse 方法,我向您推荐此解决方案R: Read in random rows from file using fread or equivalent?

【讨论】:

我怀疑 fread 是否会按行快速查询,因为它需要每次都读取文件结构,但会试一试,谢谢。我更多的是寻找按行号索引/查询的内存映射文件结构

以上是关于在第一列的 R 中查询内存不足 60gb tsv,哪个数据库/方法?的主要内容,如果未能解决你的问题,请参考以下文章

R语言中怎么把第一列的数据作为行名

避免仅在 R 数据表的第一列中换行

R的read.csv在第一列名称前加上垃圾文本[重复]

R:在第一列中按重复项合并行

在R中如何输出矩阵,第一列和第二列的数为指定数字

用第一列排列所有列的公式