R: Возможно ли распараллелить / ускорить считывание CSV с 20 миллионами строк плюс в R? - PullRequest
8 голосов
/ 30 января 2012

После загрузки CSV через read.csv довольно просто использовать multicore, segue и т. Д., Чтобы поиграться с данными в CSV.Чтение этого, однако, довольно трудоемко.

Поймите, что лучше использовать mySQL и т. Д. И т. Д.

Предполагается использование кластерного вычислительного экземпляра AWS 8xl, работающего на R2.13

Характеристики следующие:

Cluster Compute Eight Extra Large specifications:
88 EC2 Compute Units (Eight-core 2 x Intel Xeon)
60.5 GB of memory
3370 GB of instance storage
64-bit platform
I/O Performance: Very High (10 Gigabit Ethernet)

Любые мысли / идеи высоко ценятся.

Ответы [ 3 ]

5 голосов
/ 01 мая 2015

Параллельное движение может не понадобиться, если вы используете fread в data.table.

library(data.table)
dt <- fread("myFile.csv")

Комментарий к этому вопросу иллюстрирует его силу.Также вот пример из моего собственного опыта:

d1 <- fread('Tr1PointData_ByTime_new.csv')
Read 1048575 rows and 5 (of 5) columns from 0.043 GB file in 00:00:09

Мне удалось прочитать 1,04 миллиона строк менее чем за 10 секунд!

4 голосов
/ 30 января 2012

Flash или обычное HD-хранилище?Если последнее, то, если вы не знаете, где находится файл на дисках и как он разбит, очень сложно ускорить процесс, потому что несколько одновременных чтений не будут быстрее, чем одно потоковое чтение.Это из-за диска, а не процессора.Невозможно распараллелить это, не начиная с уровня хранения файла.

Если это флэш-хранилище, то может помочь решение, подобное Полу Химстре, поскольку хорошая флэш-память может иметь отличную производительность произвольного чтения, близкую к последовательной.Попробуйте ... но если это не поможет вам понять, почему.

Кроме того ... быстрый интерфейс хранения не обязательно означает, что накопители могут насытить его.Проводили ли вы тестирование производительности на дисках, чтобы увидеть, насколько быстры они на самом деле?

4 голосов
/ 30 января 2012

Что вы можете сделать, это использовать scan. Два входных аргумента могут оказаться интересными: n и skip. Вы просто открываете два или более подключений к файлу и используете skip и n, чтобы выбрать часть, которую вы хотите прочитать из файла. Есть несколько предостережений:

  • На некоторых этапах ввода-вывода диска может оказаться горлышко бутылки.
  • Я надеюсь, что при открытии нескольких подключений к одному и тому же файлу сканирование не вызывает жалоб.

Но вы можете попробовать и посмотреть, даст ли это повышение вашей скорости.

...