¿Es el lenguaje R adecuado para Big Data?


48

R tiene muchas bibliotecas dirigidas al análisis de datos (por ejemplo, JAGS, BUGS, ARULES, etc.), y se menciona en libros de texto populares como: J.Krusche, Doing Bayesian Data Analysis; B.Lantz, "Aprendizaje automático con R".

He visto una directriz de 5 TB para que un conjunto de datos se considere como Big Data.

Mi pregunta es: ¿R es adecuado para la cantidad de datos que se suele ver en los problemas de Big Data? ¿Hay estrategias a emplear cuando se usa R con este tamaño de conjunto de datos?


44
Además de las respuestas a continuación, algo bueno para recordar es el hecho de que la mayoría de las cosas que necesita de R con respecto a Big Data se pueden hacer con conjuntos de datos de resumen que son muy pequeños en comparación con los registros sin procesar. El muestreo desde el registro sin procesar también proporciona una manera perfecta de usar R para el análisis sin el dolor de cabeza de analizar líneas y líneas de un registro sin procesar. Por ejemplo, para una tarea de modelado común en el trabajo, uso habitualmente map reduce para resumir 32 gbs de registros sin procesar a 28 mb de datos de usuario para modelar.
cwharland

Respuestas:


40

En realidad esto está llegando. En el libro R in a Nutshell hay incluso una sección sobre el uso de R con Hadoop para el procesamiento de big data. Hay algunas soluciones que deben hacerse porque R hace todo su trabajo en la memoria, por lo que básicamente está limitado a la cantidad de RAM que tiene disponible.

Un proyecto maduro para R y Hadoop es RHadoop

RHadoop se ha dividido en varios subproyectos, rhdfs, rhbase, rmr2, plyrmr y quickcheck ( wiki ).


¿Pero el uso de R con Hadoop supera esta limitación (tener que hacer cálculos en la memoria)?
Felipe Almeida

RHadoop supera esta limitación. El tutorial aquí: github.com/RevolutionAnalytics/rmr2/blob/master/docs/… lo explica claramente. Debe cambiar a una mentalidad de reducción de mapas, pero proporciona el poder de R al entorno hadoop.
Steve Kallestad

2
Dos nuevas alternativas que vale la pena mencionar son: SparkR databricks.com/blog/2015/06/09/… y h2o.ai h2o.ai/product ambos muy adecuados para big data.
wacax

30

El principal problema con el uso de R para grandes conjuntos de datos es la restricción de RAM. La razón detrás de mantener todos los datos en RAM es que proporciona un acceso mucho más rápido y manipulaciones de datos que el almacenamiento en discos duros. Si usted está dispuesto a tomar un golpe en el rendimiento, entonces sí, es bastante práctico para trabajar con grandes conjuntos de datos en R .

  • Paquete RODBC: permite la conexión a una base de datos externa desde R para recuperar y manejar datos. Por lo tanto, los datos que se manipulan están restringidos a su RAM. El conjunto de datos general puede ir mucho más grande.
  • El paquete ff permite usar conjuntos de datos más grandes que la RAM mediante el uso de páginas mapeadas en memoria.
  • BigLM: Construye modelos lineales generalizados en big data. Carga datos en la memoria en trozos.
  • bigmemory: un paquete R que permite análisis paralelos potentes y eficientes en memoria y minería de datos de conjuntos de datos masivos. Permite almacenar objetos grandes (matrices, etc.) en la memoria (en la RAM) utilizando objetos punteros externos para referirse a ellos.

1
Otro paquete es distribuidoR que le permite trabajar con archivos distribuidos en RAM.
adesantos

17

Algunas buenas respuestas aquí. Me gustaría unirme a la discusión agregando las siguientes tres notas :

  1. El énfasis de la pregunta en el volumen de datos al referirse a Big Data es ciertamente comprensible y válido, especialmente considerando el problema del crecimiento del volumen de datos que supera el crecimiento exponencial de las capacidades tecnológicas según la Ley de Moore ( http://en.wikipedia.org/wiki/Moore % 27s_law ).

  2. Dicho esto, es importante recordar otros aspectos del concepto de big data. Basado en la definición de Gartner (énfasis mío - AB): " Big data son activos de información de gran volumen , alta velocidad y / o gran variedad que requieren nuevas formas de procesamiento para permitir una mejor toma de decisiones, descubrimiento de información y optimización de procesos". (generalmente conocido como el " modelo 3Vs "). Menciono esto, porque obliga a los científicos de datos y otros analistas a buscar y usar paquetes R que se centren en otros aspectos que no sean el volumen de big data (habilitado por la riqueza del enorme ecosistema R ).

  3. Si bien las respuestas existentes mencionan algunos paquetes R, relacionados con big data, para una cobertura más completa , recomendaría consultar la vista de tareas CRAN "Computación paralela y de alto rendimiento con R" ( http: //cran.r-project. org / web / views / HighPerformanceComputing.html ), en particular, las secciones "Computación paralela: Hadoop" y "Gran memoria y datos sin memoria" .


12

¡R es genial para "big data"! Sin embargo, necesita un flujo de trabajo ya que R está limitado (con cierta simplificación) por la cantidad de RAM en el sistema operativo. El enfoque que adopto es interactuar con una base de datos relacional (consulte el RSQLitepaquete para crear e interactuar con una base de datos SQLite), ejecutar consultas de estilo SQL para comprender la estructura de los datos y luego extraer subconjuntos particulares de los datos para computacionalmente intensivo análisis estadístico.

Sin embargo, este es solo un enfoque: hay paquetes que le permiten interactuar con otras bases de datos (por ejemplo, Monet) o ejecutar análisis en R con menos limitaciones de memoria (por ejemplo, ver pbdR).


9

Considerando otro criterio, creo que en algunos casos usar Python puede ser muy superior a R para Big Data. Conozco el uso generalizado de R en los materiales educativos de ciencia de datos y las buenas bibliotecas de análisis de datos disponibles, pero a veces solo depende del equipo.

En mi experiencia, para las personas que ya están familiarizadas con la programación, el uso de Python proporciona mucha más flexibilidad y aumento de la productividad en comparación con un lenguaje como R, que no está tan bien diseñado y potente en comparación con Python en términos de un lenguaje de programación. Como evidencia, en un curso de minería de datos en mi universidad, el mejor proyecto final fue escrito en Python, aunque los otros tienen acceso a la rica biblioteca de análisis de datos de R. Es decir, a veces la productividad general (considerando materiales de aprendizaje, documentación, etc.) para Python puede ser mejor que R incluso en la falta de bibliotecas de análisis de datos de propósito especial para Python. Además, hay algunos buenos artículos que explican el rápido ritmo de Python en ciencia de datos: Python Desplazamiento R y estructuras de datos científicos enriquecidos en Python que pronto puede llenar el vacío de las bibliotecas disponibles para R.

Otra razón importante para no usar R es cuando se trabaja con problemas de Big Data del mundo real, a diferencia de los problemas académicos, hay mucha necesidad de otras herramientas y técnicas, como análisis de datos, limpieza, visualización, desguace web y muchas otras que son mucho más fáciles usando un lenguaje de programación de propósito general. Esta puede ser la razón por la cual el idioma predeterminado utilizado en muchos cursos de Hadoop (incluido el curso en línea de Udacity ) es Python.

Editar:

Recientemente, DARPA también ha invertido $ 3 millones para ayudar a financiar las capacidades de procesamiento y visualización de datos de Python para trabajos de Big Data, lo que es claramente una señal del futuro de Python en Big Data. ( detalles )


3
Es un placer trabajar con R para la manipulación de datos ( reshape2, plyry ahora dplyr) y no creo que pueda hacerlo mejor que ggplot2/ ggvispara la visualización
agave orgánico

@pearpies Como dije al comienzo de mi respuesta, admito las buenas bibliotecas disponibles para R, pero en general, al considerar todas las áreas necesarias para grandes datos (que como dije algunas de ellas en la respuesta), R es no coincide con las bibliotecas maduras y enormes disponibles para Python.
Amir Ali Akbari


55
Esta respuesta parece ser completamente anecdótica y casi no muestra en ninguna parte donde R es débil en relación con Python.
stanekam

¡Oh Dios mío! "Como evidencia, en un curso de minería de datos en mi universidad, el mejor proyecto final fue escrito en Python, aunque los otros tienen acceso a la rica biblioteca de análisis de datos de R." ¿Y quieres que los lectores respeten tu análisis? Guau. ¿Podría haber otros factores involucrados en que el mejor proyecto sea un proyecto de Python que no sea el idioma en que fue escrito? realmente ....
Shawn Mehan

7

R es genial para muchos análisis. Como se mencionó anteriormente, hay adaptaciones más recientes para big data como MapR, RHadoop y versiones escalables de RStudio.

Sin embargo, si su preocupación son las bibliotecas, esté atento a Spark. Spark fue creado para Big Data y es MUCHO más rápido que Hadoop solo. Tiene bibliotecas de aprendizaje automático, SQL, transmisión y gráficos en gran crecimiento. Por lo tanto, permite que gran parte, si no todo, el análisis se realice dentro del marco (con API de múltiples idiomas, prefiero Scala) sin tener que barajar entre idiomas / herramientas.


4

Como han señalado otras respuestas, R puede usarse junto con Hadoop y otras plataformas informáticas distribuidas para escalarlo al nivel de "Big Data". Sin embargo, si no está casado con R específicamente, pero está dispuesto a usar un entorno "similar a R", Incanter es un proyecto que podría funcionar bien para usted, ya que es nativo de JVM (basado en Clojure) y no No tiene el "desajuste de impedancia" entre sí y Hadop que R tiene. Es decir, desde Incanter, puede invocar las API Hadoop / HDFS nativas de Java sin necesidad de pasar por un puente JNI ni nada.


2

Estoy lejos de ser un experto, pero mi comprensión del tema me dice que R (excelente en estadísticas) y, por ejemplo, Python (excelente en varias de esas cosas en las que R carece) se complementan bastante bien (como se señaló en publicaciones anteriores) .


0

Creo que en realidad hay una gran cantidad de herramientas para trabajar con big data en R. sparklyr será un gran jugador en ese campo. sparklyr es una interfaz R para Apache Spark y permite la conexión con clústeres locales y remotos, proporcionando un back-end dplyr. También se puede confiar en las bibliotecas de aprendizaje automático de Apache Spark. Además, el procesamiento en paralelo es posible con varios paquetes como rmpi y snow (controlado por el usuario) o doMC / foreach (basado en el sistema).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.