2009-12-09 9 views
24

Estoy trabajando con un marco de datos grande, y me he topado con los límites de RAM. En este punto, probablemente necesite trabajar con una versión serializada en el disco. Hay a few packages para admitir operaciones de falta de memoria, pero no estoy seguro de cuál se adaptará a mis necesidades. Preferiría mantener todo en marcos de datos, por lo que el paquete ff parece alentador, pero todavía hay problemas de compatibilidad que no puedo solucionar.¿Mejores prácticas para almacenar y usar marcos de datos demasiado grandes para la memoria?

¿Cuál es la primera herramienta a la que recurrir cuando se da cuenta de que sus datos han alcanzado la escala de falta de memoria?

Respuesta

26

Es probable que desee ver en estos paquetes:

  • ff para 'archivo plano' almacenamiento y recuperación muy eficiente (se puede hacer data.frames; diferentes tipos de datos)
  • bigmemory por fuera de -R-memory pero aún en uso de RAM (o respaldado por archivos) (solo puede hacer matrices; mismo tipo de datos)
  • biglm para ajuste de modelo sin memoria con modelos de estilo lm() y glm().

y también vea la vista de tarea High-Performance Computing.

0

Si se trata de problemas de memoria que debe tratar los siguientes pasos:

  1. claro proceso adicional que consumen memoria RAM. Asegúrate de no abrir el navegador con muchas pestañas ya que parecen consumir mucha RAM.

  2. Después de terminar con el paso 1, comprenda la estructura de su archivo de datos. Para ese propósito, use read.csv (nrow = 100). Al hacer esto, sabrá cuáles son las columnas y la estructura de la columna. Si encuentra alguna columna que no sea útil, elimínela.

  3. Una vez que conozca la estructura de columnas (colclasses) puede importar toda la trama de datos de una sola vez ..

Aquí está el código de ejemplo:

initial <- read.table("datatable.txt", nrows = 100) 
classes <- sapply(initial, class) 
tabAll <- read.table("datatable.txt", colClasses = classes) 
  1. Utilice fread() para leer marcos de datos grandes.

  2. Si aún así no resuelve el problema, segmente el conjunto de datos en dos partes divida el número de filas en dos partes iguales y luego combínelas después de aplicar la técnica de reducción de dimensionalidad.

Espero que ayude.

Cuestiones relacionadas