Запрос из памяти 60 ГБ tsv в R в первом столбце, какая база данных/метод?

У меня есть 6 больших матриц tsv размером 60 ГБ (несжатых), содержащих 20 миллионов строк x 501 столбец: первый индексный/целочисленный столбец, который в основном является номером строки (поэтому даже не требуется), 500 столбцов являются числовыми (с плавающей запятой, 4 десятичных знака, например, 1,0301). Все tsv имеют одинаковое количество строк, которые соответствуют друг другу.

Мне нужно извлечь строки по номеру строки.

Мне нужно извлечь до 5000 смежных строк или до 500 несмежных строк, а не миллионы. Надеюсь, также есть какое-то сжатие, чтобы уменьшить размер до 60gb, так что, может быть, нет SQL? Как лучше всего это сделать?

  • Один из способов, который я пробовал, — разделить их на 100 сжатых gzip-файлов, проиндексировать их с помощью tabix, а затем запросить их, но это слишком медленно для моих нужд (500 случайных строк заняли 90 секунд).

  • Читал про пакет ff, но не нашел как индексировать по первому столбцу?

  • Есть ли другие способы?

Спасибо большое.


person tafelplankje    schedule 15.02.2019    source источник


Ответы (1)


Я буду использовать fread() из пакета data.table

Используя параметры skip и nrows, вы можете играть с начальной строкой для чтения (skip) или количеством строк для чтения (nrows).

Если вы хотите изучить подход tidyverse, я рекомендую вам это решение R: Читать случайные строки из файла, используя fread или эквивалент?

person LocoGris    schedule 15.02.2019
comment
Я сомневаюсь, что fread будет быстро запрашивать построчно, так как ему нужно каждый раз читать файловую структуру, но попробую, спасибо. Я больше ищу файловую структуру с отображением памяти, которая индексирует/запрашивает по номеру строки - person tafelplankje; 16.02.2019