2012-01-30 4 views
8

Как только CSV загружается через read.csv, довольно просто использовать multicore, segue и т. Д., Чтобы играть с данными в CSV. Тем не менее, чтение его в настоящее время довольно утомительно.R: Возможно ли распараллелить/ускорить чтение в 20-миллионной строке CSV в R?

Осознайте, что лучше использовать MYSQL и т.д. и т.п.

Предположим использование 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) 

Любые мысли/идеи очень признателен.

+0

Этот вопрос может быть вам интересен: http://stackoverflow.com/questions/9061736/faster-than-scan-with-rcpp –

+0

Или этот, а также http://stackoverflow.com/questions/1727772/fast-reading-very-large-tables-as-dataframes-in-r –

ответ

2

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

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

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

2

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

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

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

5

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

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

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

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 лет!

+0

Привет, стоит ли параллельно тестировать несколько файлов? это из-за ограничения доступа к диску? – Boris

+0

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