¿Cómo puedo procesar grandes conjuntos de datos con mi computadora portátil? En una competencia de minería de datos, hay un CSV de 1GB de información del cliente para procesar. ¿Hay alguna manera de procesarlo sin cargarlo todo en la RAM, o podría procesar solo una parte a la vez?

Hay dos alternativas que no se han discutido hasta ahora en las otras respuestas:

1. GraphChi: Esfuerzo de la CMU (mismo grupo que surgió con GraphLab): le permite realizar un procesamiento de gráficos basado en disco en billones de gráficos de nodos rápidamente en una configuración no distribuida (nodo único). Puede no ser completamente útil en este contexto, pero tienen algunos algoritmos de aprendizaje automático como parte de GraphChi, que podrían usarse para procesar el archivo CSV. El software completo está disponible para descargar en: GraphChi. Este es un trabajo muy interesante: pudieron contar con un triángulo en un gráfico de Twitter-2010 en menos de 90 minutos en un solo nodo, mientras que una solución basada en Hadoop utiliza 1400 trabajadores en una configuración distribuida y ¡toma 400 minutos!
2. Estaba @strataconf en Nueva York en octubre de 2013 y vi una demostración de un terabyte siendo aplastado en un solo nodo por Sisense, una pequeña startup. Vea esta noticia: SiSense “10X10X10 Challenge” rompe récord en la Conferencia Strata Big Data (Pudieron procesar 10 TB de datos en 10 segundos en una máquina de 10K $). Pruebe el producto Sisense Prism aquí: Prueba gratuita de Business Analytics.

Algunos pensamientos:

  • Desarrolle en su computadora portátil con pequeñas muestras de datos (por ejemplo, una muestra del 5%). Cuando esté listo para probar algo en el conjunto de datos completo, ejecute su código en la nube. Una máquina de cuatro núcleos con 8 GB de RAM y una unidad SSD cuesta un poco más de un centavo por hora en Digital Ocean. Puede usar una máquina potente durante 8 horas por día durante una semana por aproximadamente 5 dólares.
  • No usaría Hadoop. La sobrecarga de escribir y ejecutar trabajos de reducción de mapas no está justificada a menos que tenga mucha, mucho más de 1 GB de datos.
  • Desde el punto de vista de la ejecución del programa, Java probablemente será significativamente más rápido que Python y R.
  • Como varias personas han mencionado, almacenar datos en un formato condensado como binario ayudará a que los conjuntos más grandes quepan en la memoria. A menudo, la compensación es que cuanto más comprime los datos, más trabajo tendrá que hacer tanto su código como la CPU para trabajar con esos datos. Esto puede o no valer la pena dependiendo de su capacidad de codificación y la velocidad de su CPU.
  • A largo plazo, está renunciando a una gran cantidad de ciclos de productividad / desarrollo porque no tiene una buena máquina de desarrollo. Si puede pagarlo, puede obtener una computadora portátil sólida por menos de $ 1000 en estos días. Cuesta más por adelantado, pero le ahorra mucho tiempo y dolores de cabeza en el futuro.

Este conjunto de datos no debería ser un problema si tiene una máquina moderna con una cantidad decente de RAM (al menos 2 GB).

Hice un experimento rápido con un conjunto de datos que tengo de una antigua competencia de Kaggle. Después de truncarlo para llegar a 1.0GB, usé python y la biblioteca de pandas para cargar el archivo en la memoria. Los tipos de datos de pandas están respaldados por matrices numpy que son eficientes tanto en términos de memoria como de velocidad. Cuando finalizó la carga, el proceso de Python estaba usando 1.88GB de memoria, por lo que puede ver que la sobrecarga es inferior a 2x en ese caso.

Una vez que tenga los datos en la memoria, puede hacer todo tipo de consultas utilizando operaciones similares a las que admiten los marcos de datos de R. Esto incluye filtrado, agregación, uniones y más.

He utilizado con éxito la combinación python + pandas en muchos casos. Obtiene un rendimiento que rivaliza con el código C pero al mismo tiempo está trabajando en un lenguaje de alto nivel con bibliotecas potentes.

Eso no parece tantos datos. Cualquier computadora fabricada en los últimos 5 años o más podría hacer un trabajo decente, siempre que tenga alrededor de 2 GB de RAM. La mayoría de las computadoras portátiles de hoy en día vienen con 2-4 GB, más a menudo 4.

Sin embargo, ni siquiera tiene que cargar todo el archivo en la memoria necesariamente, depende de lo que esté haciendo.

Puede ahorrar memoria procesando los datos por lotes si es necesario. Básicamente, lees en un cierto número de líneas a la vez, lo procesas y luego pasas al siguiente conjunto de líneas. Consulte Stackoverflow para ver un ejemplo específico de idioma, pero aquí hay uno para python: Procesar archivos grandes, línea por línea.

Si el conjunto de datos es tan grande que le causa problemas en su máquina, puede obtener una suscripción a algo como Domino Data Lab: Domino Data Lab o Wakari: Python Data Analysis basado en la web.

No estoy afiliado, acabo de enterarme de ambos antes.

Domino Data Lab se ejecuta en la nube de computación elástica de Amazon, por lo que es posible que deba pagar una pequeña cantidad de dinero. Estará en el rango de centavos a unos pocos dólares para un trabajo pequeño. Amazon EC2 tiene una cierta cantidad de tiempo de servidor que también le dará de forma gratuita, por lo que también puede verificar eso: AWS Free Tier, sin embargo, será más técnico para poner en funcionamiento un servidor que simplemente usando Domino Data Laboratorio o Wakari.
.
También lo dejaré aquí porque podría ayudarlo con el resto de su proyecto: Plotly

Es mejor elegir perl, python, R y esproc en computadoras portátiles, ya que son lenguajes de programación con una sintaxis ágil y un entorno de aplicación fácil, no como Java, que necesita mucho tiempo para prepararse antes de comenzar a trabajar. La herramienta principal para procesar datos estructurados es esProc, que es fácil de aprender. El lenguaje R ocupa el segundo lugar porque es un poco difícil de aprender. Inferior a esProc y R, Perl y python son iguales en este aspecto, y este último es más fácil de dominar. Para cálculos estadísticos complicados de expresiones matemáticas, el lenguaje R es casi la primera opción. Con una RAM relativamente pequeña, una computadora portátil puede realizar cálculos utilizando el cursor de archivo de esProc sin preocuparse de que se produzca un desbordamiento de memoria. esProc puede aumentar la velocidad computacional mediante el uso de subprocesos múltiples independientes para CPU de múltiples núcleos.

KNIME es un encantador software de código abierto que le permite leer, preparar y analizar datos en una computadora de escritorio o portátil Mac, Linux o Win común. Está basado en eclipse, por lo que es fácil de extender y puede usar operadores prefabricados para hacer el trabajo duro de preparar los datos para su uso, luego simplemente coloque un fragmento R para hacer el trabajo analítico real. (Supongo que no hay ningún operador prefabricado que haga lo que quieres hacer, ya que estás tratando de hacer algo nuevo y genial). Trabajo en Actian y nos asociamos con KNIME porque tienen Buena plataforma de configuración de minería de datos agnóstica. KNIME es totalmente gratuito a menos que necesite las capacidades del servidor, y no parece que se esté volviendo tan complicado con él.

Como trabajo en Actian, generalmente uso el producto Actian Dataflow Analytics, que es una combinación de KNIME con un motor de ejecución de alto rendimiento y algunos operadores paralelos preconstruidos. Tengo un pequeño mini clúster Hadoop de 4 nodos en mi oficina, pero realizo el 90% de mi análisis directamente en mi vieja computadora portátil I5 de 4 núcleos con 4 gigas de RAM. Si obtiene la versión de prueba gratuita de la herramienta de análisis de flujo de datos de Actian, le brinda un gran aumento de la velocidad de procesamiento sin sobrecargar la RAM porque procesa el flujo de trabajo en tuberías, en lugar de leer todo en RAM antes de procesar. Suponiendo que pueda terminar en un mes, no le costará nada hacer su proyecto.

Buena suerte en el concurso!

HTH

Paige

Si realmente desea trabajar con él en su computadora portátil, explote sus núcleos múltiples (suponiendo que los tenga). En Python esto es muy fácil usando la capacidad de clúster de iPython o las bibliotecas multinúcleo de R. También puede instalar hadoop en su computadora portátil. Si realmente quiere ser inteligente al respecto, simplemente usaría hadoop en su computadora portátil para crear un prototipo y luego, una vez que lo haya derribado, arrojará Amazon EC2 o incluso Elastic MapReduce (EMR), probablemente le costará muy poco y corre MUCHO más rápido. Sin embargo, puedo entender si intentas hacerlo todo en tu computadora portátil, también lo hago a veces, y como se mencionó, 1 GB no es una gran cantidad de datos.

Como mencionó Dima Korolev, podría convertirlo en una representación matricial comprimida, esto le permitiría trabajar en los datos más fácilmente.

Mencionas Java. Si desea trabajar en Java, puede usar un grupo de subprocesos, quizás un patrón de diseño básico de productor / consumidor, y hacer uso de múltiples núcleos de esa manera.

Sugeriría FastBit como alternativa. Es una biblioteca de consulta de datos basada en columnas de código abierto que se creó para realizar operaciones de consulta en datos de física de partículas extremadamente grandes. Tiene poca necesidad de memoria, y su interfaz de línea de comandos, IBIS, permite la conversión de CSV a la estructura db de FastBit y también permite algunas operaciones básicas de consulta.

Es mejor usar el búfer para cargar los datos en la RAM. Para que pueda leer y procesar un fragmento (es decir, 32K) cada vez.

Consulte la biblioteca Java uniVocity-parsers para obtener ayuda, ya que proporciona un búfer de carga y lectura de subprocesos múltiples (que también aumenta el rendimiento). Compruebe también la configuración para habilitar el búfer y establecer el tamaño del búfer.

¡1 GB .csv no es big data!
Puede adaptarlo fácilmente a la memoria.
Solo asegúrese de usar un lenguaje que sea eficiente en la memoria (generalmente: C> Python> Java> PHP)

Sugeriría dos formas de analizarlo usando R en su computadora portátil

1) Dado que es un archivo CSV de 1 GB, puede volcarlo en un db MySQL y usar las bibliotecas RMySQL / RODBC para procesar una porción de datos a la vez.

2) Si usa una máquina Linux, configure un clúster hadoop pseudodistribuido o descargue un sandbox de Cloudera o Hortonworks, luego instale RHadoop y analice los datos. Puede usar este enlace para un inicio rápido de RHadoop. Instale RHadoop en Hortonworks HDP 2.0

1 GB de CSV no es nada. Conviértalo en una representación binaria para almacenarlo en la memoria de forma compacta y aquí tiene.

He oído que Clojure sería genial después, pero aún no lo he usado.

Sin embargo, acumulé muchos datos en mi computadora portátil usando C ++ en los últimos años.

¡Buena suerte!

“No tengo acceso a computadoras rápidas. […] un grupo distribuido de” supercomputadoras “con el que podría unirme” bueno, sí, siempre y cuando pueda usar una tarjeta de crédito http: //aws.amazon. com / ec2 / (requerido incluso para el nivel gratuito AFAIK).

No tiene que cargar esto en R para procesarlo, vea ff, bigdata y bigvis

Trabaje con una muestra adecuada si su análisis puede realizarse utilizando muestras. Es posible que desee utilizar más de una muestra para validar los resultados obtenidos.

Personalmente, maximizo la RAM (barata) y la SSD (no barata).