2012-01-30 19 views
8

Una vez que el CSV se carga a través read.csv, es bastante trivial para utilizar multicore, segue etc para jugar con los datos de la CSV. Leerlo, sin embargo, es bastante el tiempo de hundirse.R: ¿Es posible paralelizar/acelerar la lectura de una CSV de más de 20 millones de filas en R?

cuenta de que es mejor utilizar MySQL, etc, etc

Suponga que el uso de un 8XL AWS agruparse instancia de proceso se ejecuta R2.13

Especificaciones de la siguiente manera:

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) 

Cualquier pensamientos/ideas muy apreciado.

+0

Esta pregunta también puede ser interesante para usted: http://stackoverflow.com/questions/9061736/faster-than-scan-with-rcpp –

+0

O este también http://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r –

Respuesta

2

Lo que podría hacer es usar scan. Dos de sus argumentos de entrada podrían ser interesantes: n y skip. Simplemente abra dos o más conexiones al archivo y use skip y n para seleccionar la parte que desea leer del archivo. Hay algunas advertencias:

  • En algún momento, disco i/o podría ser el cuello de la botella.
  • espero que la exploración no se queja al abrir múltiples conexiones a un mismo archivo.

Pero podría intentarlo y ver si aumenta su velocidad.

2

Flash o de almacenamiento HD convencional? En este último caso, si no sabe dónde está el archivo en las unidades y cómo se divide, es muy difícil acelerar las cosas porque las lecturas múltiples simultáneas no serán más rápidas que una lectura transmitida. Es por el disco, no por la CPU. No hay forma de paralelizar esto sin comenzar en el nivel de almacenamiento del archivo.

Si se trata de almacenamiento flash, una solución como la de Paul Hiemstra podría ayudar, ya que un buen almacenamiento flash puede tener un excelente rendimiento de lectura aleatoria, casi secuencial. Pruébalo ... pero si no te está ayudando a saber por qué.

también ... una interfaz de almacenamiento rápido no implica que en las unidades pueden saturarlo. ¿Has realizado pruebas de rendimiento en las unidades para ver qué tan rápido realmente son?

5

ir paralelo no podría ser necesaria si se utiliza fread en data.table.

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

Un comentario a este question ilustra su poder. También aquí está un ejemplo de mi propia experiencia:

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

yo era capaz de leer en 1,04 millones de filas en menos de 10 segundos!

+0

Hola, ¿vale la pena que se comparta en paralelo cuando hay varios archivos? ¿es por la limitación de acceso al disco? – Boris

+0

Hola Borris, te sugiero que publiques una nueva pregunta con tu problema. La respuesta depende de la cantidad de memoria que necesita, el tamaño de sus archivos y lo que está tratando de hacer. Además, ¿tiene memoria o CPU limitada? –

Cuestiones relacionadas