¿Cuáles son las diferencias entre Apache Spark y el Tensor Flow de Google?

Respuesta corta:

  • Si está haciendo un aprendizaje automático simple al estilo de un patio de recreo (o un trabajo típico de tipo universitario), probablemente no necesite ninguno de esos, y estará encantado de ejecutar scikit-learn en Python o algo similar.
  • Si necesita crear una aplicación de Big Data, Spark es una gran opción, y por cierto tiene un módulo de aprendizaje automático para que pueda conectar un poco de ML en su aplicación.
  • Si necesita crear un modelo de aprendizaje automático sofisticado que funcione realmente bien y se ejecute de manera eficiente, TensorFlow es una gran opción, y por cierto funciona bien con grandes conjuntos de datos siempre que pueda ejecutarlo en una máquina (AFAIK Google no se ha abierto -sourced el código para los cálculos distribuidos de TensorFlow en una red).

Respuesta larga:

Hay algunas similitudes conceptuales, pero son motores diferentes para diferentes propósitos que tienen una superposición parcial.

Spark es un motor para el procesamiento de datos distribuidos, es decir, software para tomar datos más o menos arbitrarios, código más o menos arbitrario que procesa esos datos y ejecuta ese código de manera eficiente sobre (potencialmente) muchos núcleos o máquinas, sobre una red si es necesario. Spark puede verse como un MapReduce generalizador y optimizador. Uno de los módulos que viene con Spark es MLlib, que proporciona algunas operaciones comunes de “aprendizaje automático” que están optimizadas previamente para Spark y se pueden llamar directamente desde el código. Pero hay muchos otros módulos similares (por ejemplo, GraphX ​​para análisis de gráficos, y muchos otros).

TensorFlow es un motor para el aprendizaje automático, es decir, un software para definir y ejecutar modelos de aprendizaje automático, de manera independiente de la implementación (es decir, el mismo código puede ejecutarse en una CPU, en una GPU, en paralelo sobre máquinas, etc.). Viene con una gran cantidad de primitivas y características de aprendizaje automático, adecuadas para construir modelos ML sofisticados.