¿Es Scala una mejor opción que Python para Apache Spark en términos de rendimiento, curva de aprendizaje y facilidad de uso?

Si te refieres a la API, entonces depende.

En primer lugar, es muy probable que el rendimiento no importe, ya que casi todo es Scala bajo el capó para Spark y siempre puedes usar más máquinas para compensar cualquier otra cosa. Las curvas de aprendizaje se pueden superar y la API Scala de Spark es bastante simple. La facilidad de uso es honesta y probablemente el punto clave a considerar.

Spark está escrito en Scala, por lo que saber Scala le permitirá comprender y modificar lo que Spark hace internamente. Sin Scala una vez que llegue a la pared de lo que es posible fuera de la caja que ha terminado, ¿necesita un nuevo tipo de RDD? Demasiado. La documentación de Spark no es perfecta y, como gran parte del código abierto, el código es la documentación real. Entonces, a menos que pueda entender Scala, nunca podrá comprender realmente lo que sucede cuando ejecuta algún código.

Dicho esto, Scala carece de la misma cantidad de bibliotecas y herramientas de Data Science que Python. No hay una buena visualización, no hay buenas transformaciones de datos locales, no hay buenas herramientas locales, etc. La gente ha portado la mayoría de las partes centrales de R a Python y hay formas fáciles de llamar a R directamente desde Python . Scala / Java no ha tenido tanto esfuerzo en ese frente. Hay algunas cosas, pero no son muy completas ni cohesivas. Por ejemplo, Databricks parece basar sus ofertas de propiedad en Python en lugar de Scala (básicamente un cuaderno de IPython para Spark).

Entonces, si desea hacer un análisis simple a moderadamente complejo utilizando Spark, Python parece el camino a seguir. Si desea construir sistemas de producción, entonces Scala es el camino a seguir. Si quieres hacer cosas realmente complicadas, entonces Scala posiblemente con una capa final de Python.

  • Rendimiento: Scala gana. Python es 10 veces más lento que los lenguajes JVM. Si su código de Python solo llama a las bibliotecas de Spark, estará bien. Pero si su código Python procesa mucho, se ejecutará más lentamente que el equivalente de Scala.
  • Curva de aprendizaje: Python tiene una ligera ventaja sobre Scala (estilo funcional) para las tareas habituales de ciencia de datos. Pero Scala es muy amigable, de todos modos. A menos que comience a utilizar conceptos avanzados orientados a objetos.
  • Facilidad de uso: Scala gana. Spark en sí está construido sobre Scala. Las cosas son “más naturales” con Scala.
  • Bibliotecas: Python tiene mejores bibliotecas en ML y NLP, pero no están orientadas a Big Data. Spark MLLib tiene menos algoritmos, pero son perfectos para Big Data.

Respuesta actualizada en octubre de 2017.

En mi experiencia, en general, “No” .

  1. Python puede ser mucho más lento en el clúster que Scala (algunos dicen 2 a 10 veces más lento para las abstracciones RDD), pero ayuda a los científicos de datos a hacer mucho más. No necesitan lidiar con la complejidad de Scala y otros problemas relacionados con las 101 formas diferentes de hacer incluso cosas simples en Scala. La interfaz de Pyspark es bastante completa (afortunadamente). El 99% del tiempo he usado Spark, he usado Pyspark y mi equipo también usa Pyspark, y ha funcionado lo suficientemente bien para los grandes conjuntos de datos que hemos manejado. Nota: Con Spark 2.x, las diferencias de rendimiento entre las API basadas en Python, R y Scala para Spark son mínimas, en términos de rendimiento.
  2. La legibilidad, mantenibilidad y familiaridad del código es mucho mejor con Python. Es más fácil encontrar, contratar y entrenar programadores de Python y llevarlos a bordo con Spark.
  3. Python viene con algunas bibliotecas que son bien conocidas por el análisis de datos y las estadísticas que posiblemente sean más maduras y probadas en el tiempo que las de Spark ML / MLLib. Algunos ejemplos son numpy, pandas, matplotlib, seaborn y scikit-learn. Una vez que se utiliza Spark para resumir conjuntos de datos o crear tablas más pequeñas, estas bibliotecas pueden ser útiles para todo, desde el aprendizaje automático hasta la visualización. Por lo tanto, un enfoque “híbrido” en el que usamos lo mejor de cada plataforma puede beneficiar a los científicos de datos. Lo más probable es que si tiene un clúster que puede realizar el procesamiento de datos basado en Spark, puede terminar haciendo la visualización de datos u otras cosas en las que Python es bueno, a nivel de nodo local.
  4. Las bibliotecas de visualización de Python complementan Pyspark (y su falta de tales bibliotecas) muy bien, ya que ni Spark ni Scala tienen nada comparable. Para la ciencia de datos / estadísticas, la visualización es muy importante y, por lo tanto, tiene valor usar Python sobre Scala. Una opción más es SparkR, que atrae a los usuarios de R.
  5. El código Scala tarda mucho tiempo en compilarse y el código Scala puede producir resultados inconsistentes a veces (vea la queja de Paul Philips en una de las conferencias de LinkedIn: Paul fue un usuario / colaborador legítimo de Scala durante cinco años en Typesafe), así que si usted ‘ Al escribir cualquier cosa compleja en Scala, como productos de datos, que desee utilizar las bibliotecas Spark o Scala para ejecutar, puede encontrarse con obstáculos al desarrollar y compilar en un equipo considerable.
  6. Finalmente, la comunidad Scala es mucho menos útil para el programador típico que la comunidad Python, con respecto a la mayoría de las cosas. Esto hace que Python sea un lenguaje más valioso para aprender en general: siempre que tenga experiencia en un lenguaje estáticamente tipado como Java, debería estar bien aprendiendo Python y no preocuparse demasiado por Scala. Espero (si no espera) que Scala sea reemplazado por algo mejor, pero eso es todo lo que parece que tenemos como un lenguaje de programación funcional convencional en este momento.

Comencé a trabajar con Apache Spark hace aproximadamente 2 meses para un proyecto en el trabajo. Creo que Marcin Mejran realmente tiene razón. Si realmente desea usar Spark en el contexto de un sistema distribuido más grande, Scala es realmente el camino a seguir. Entre Akka y su interloop en todas las demás aplicaciones JVM es difícil argumentar en contra.

Dicho esto, si está trabajando en una sola máquina y solo quiere “comenzar” con Spark, entonces Python es mucho más fácil. Se han vertido toneladas de recursos en un buen enlace entre Python y Apache Spark para que realmente no pierdas una tonelada. Además, con Datasets API y Dataframes API, los problemas de rendimiento son menos problemáticos. Además de eso, puede usar las bibliotecas Pythons para la visualización y otras técnicas de ML.

Elegí Scala para mi trabajo pero termino buscando en Python Code ideas cuando escribo Spark.

Algunas personas citarán el rendimiento como una razón para elegir Scala sobre Python cuando usen Spark. Te diré que dejes de lado tus preocupaciones sobre la velocidad. Todos en el mundo saben que los lenguajes compilados son más rápidos que los interpretados. No es un debate que valga la pena tener más.

Es más valioso considerar lo que es importante para usted. ¿Las personas de su empresa conocen a Scala y Python por igual? Luego usa Scala. ¿La gente conoce Python mejor que Scala? Luego usa Python. Aquí hay un artículo que escribí sobre el uso de Python con Apache Spark

La razón por la que sugiero Python en este caso es que es mucho más importante ser productivo que descubrir las complejidades de un nuevo lenguaje. Si le dijeron que su código se ejecutará un 10% más lento, pero su código se escribirá 3-10 veces más rápido porque no está aprendiendo cómo funciona el nuevo idioma, estoy bastante seguro de que la compensación es clara.

Ahora, para ser claros, realmente soy un fanático de Scala. Le recomendaría que, mientras trabaja con Spark a través de Python, considere trabajar dentro de un entorno portátil como Apache Zeppelin. Luego, intente jugar con el mismo código dentro del cuaderno en Python y Scala. Esto ayudará a facilitar su curva de aprendizaje y mantenerlo productivo.

Para mi primer curso de capacitación Apache Spark (en edX), me dieron un archivo vagabundo VM. Como incluía todos los elementos necesarios, Hadoop no era una preocupación. La codificación del curso fue en Python, con el que estaba familiarizado. Así que me sentí cómodo al programar el curso.

Más tarde, para un proyecto, planeé usar Spark. Planeaba usar Spark con Python. Desarrollar la “plataforma (?)” De Hadoop necesaria en mi computadora resultó ser una pesadilla.

En ese momento, leí que Spark con Scala plantea menos problemas con respecto a Hadoop. Entonces, pasé unos tres días para aprender y comenzar a usar Scala.

Ahora estoy disfrutando de Spark con Scala. Definitivamente recomendaría Scala para Spark, particularmente si Hadoop está creando un cuello de botella.

En lo que respecta al soporte de API, es posible que muchas características futuras tengan sus API en Scala y Java y las API de Python evolucionen en las versiones posteriores. Por lo tanto, todo depende de qué funcionalidad se esté desarrollando.

En términos de rendimiento, Python RDD es más lento en comparación con Scala RDD.

Imagen de abajo Muestra la comparación de rendimiento entre las abstracciones de Scala y Python.

Imagen cortesía: Presentación de DataFrames en Apache Spark para ciencia de datos a gran escala

No repetiré muchos puntos buenos elaborados en otras respuestas, como el rendimiento, la facilidad de uso, la capacidad de leer el código fuente, la disponibilidad de la biblioteca ML. Una cosa que me gustaría agregar es que si considera usar Spark Streaming, definitivamente debería elegir Scala por ahora. El soporte de Python para la transmisión de Spark se ha agregado desde Spark 1.2. Admite todas las transformaciones de DStream y casi todas las operaciones de salida disponibles originalmente en Scala. Sin embargo, solo es compatible con fuentes básicas como archivos de texto y datos de texto sobre sockets. El soporte de transmisión de Python / Spark no es tan maduro como Scala / Spark. Por supuesto, las cosas cambiarán en el futuro. Las API para fuentes adicionales, como Kafka y Flume, se agregarán en futuras versiones.

Apache Spark actualmente es compatible con los lenguajes de programación Java, R, Scala y Python, lo que resulta problemático para los desarrolladores para decidir qué idioma elegir al trabajar en un proyecto Spark. Depende de las habilidades de programación del desarrollador, pero preferiblemente Scala y Python se han convertido en el lenguaje elegido por los científicos de datos para trabajar con Apache Spark.

Ahora, una vez más, la gran pregunta es qué idioma elegir entre estos dos lenguajes de programación para aplicaciones Spark. La respuesta depende completamente de los escenarios, el conjunto de habilidades, el caso de uso y los requisitos. Compare las características principales del lenguaje de programación, verifique cuál tiene una ventaja en ese campo y elija la mejor.

Actuación

En términos de rendimiento, Scala es 10 veces más rápido que Python para el procesamiento y análisis de datos debido a la presencia de Java Virtual Machine. Si desea utilizar sus códigos de Python en el programa en diferentes tareas de procesamiento, obviamente los resultados serán más lentos que Scala en la misma máquina. Entonces, podemos decir que Scala es la mejor opción sin ninguna duda, ya que ofrece un mejor rendimiento para los proyectos Apache Spark en comparación con Python.

Curva de aprendizaje

Es más fácil aprender Python que Scala tanto para principiantes como para programadores de Java debido a sus bibliotecas estándar y su tarea simple, mientras que la sintaxis para Scala es poco difícil. Aunque Python es comparativamente más fácil de aprender, no es la opción correcta para sistemas altamente escalables y concurrentes como Twitter o SoundCloud. Por lo tanto, aprender un lenguaje difícil como Scala no solo enriquece el conocimiento del programador sino que también optimiza la funcionalidad general de la programación.

Facilidad de uso

Scala tiene la ventaja en términos de facilidad de uso, ya que Spark se creó con Scala. Tener un buen conocimiento de Scala le ayuda a comprender cómo funciona Spark y a lograr las tareas con éxito. Por lo tanto, es más fácil usar Scala con Spark que cualquier otro idioma.

La elección del idioma depende únicamente del problema a resolver para la programación en Big Data Apache Spark.

Aprenda información detallada sobre Python y Apache Spark de Zeolearn.

Si tienes tiempo revisa estos enlaces:
Grupos de Google (python vs scala for spark: en las respuestas hay una prueba de rendimiento)
¿Cuál debería aprender? Python o Scala?

Respuesta corta:
Scala:
+ rendimiento (usa JVM)
curva de aprendizaje (es una alternativa de Java y tiene una comunidad tibia para obtener ayuda)
-fácil de usar (por las mismas razones, necesita miles de líneas de código para un uso rápido- tiene un ‘plus’ porque admite bibliotecas java)
Se recomienda para sistemas a gran escala.
Pitón:
-rendimiento (más lento que c)
+ curva de aprendizaje (tiene una gran comunidad, soporte y tutoriales)
+ facilidad de uso (gran colección de la biblioteca de la comunidad)
Se recomienda para sistemas de pequeña escala y para una demostración rápida.

(Personalmente, uso Python para el desarrollo web y para pequeñas aplicaciones para mis proyectos universitarios)

Elegir un lenguaje de programación para Apache Spark es un asunto subjetivo porque las razones, por qué un científico de datos en particular o un analista de datos como Python o Scala para Apache Spark, no siempre pueden ser aplicables a otros. Basado en casos de uso únicos o en un tipo particular de aplicación de big data que se desarrollará, los expertos en datos deciden qué idioma es el más adecuado para la programación de Apache Spark. Es útil para un científico de datos aprender Scala, Python, R y Java para programar en Spark y elegir el lenguaje preferido en función de la eficiencia de las soluciones funcionales para las tareas. Exploremos algunos factores importantes a considerar antes de decidir Scala vs Python como el lenguaje de programación principal para Apache Spark.

No he visto en las respuestas algunas ventajas de Scala sobre Python:

  • Scala tiene fuertes tipos estáticos. Los errores se generan en la etapa de compilación. Facilita su proceso de desarrollo, especialmente en grandes proyectos.
  • Scala se basa en JVM, por lo que es nativo de Hadoop. Hadoop es importante porque Spark se creó en la parte superior del sistema de archivos HDFS de Hadoop. Python interactúa muy mal con los servicios de Hadoop, por lo que los desarrolladores tienen que usar bibliotecas de terceros (como hadoopy). Scala interactúa con Hadoop a través de la API nativa de Hadoop en Java. Es por eso que es muy fácil escribir aplicaciones nativas de Hadoop en Scala.

Python es muy bueno si quieres jugar con Spark. Pero si va a crear una solución de producción, Scala es la mejor.

Hay más información relacionada sobre esto:

¿Por qué Scala para machine learning? por Roman Zykov en Data Science School

Bueno, el idioma nativo de Spark es Scala. Obtendrá un rendimiento más rápido si usa Scala. Dicho esto, si no conoces Scala, ¿vale la pena tomarse el tiempo para aprenderlo solo para Spark? Eso depende de cuánto de su carga de trabajo futura involucra Spark. Si prevé que trabajará mucho con Spark en el futuro, le diría: ¡APRENDA! Por un lado, obtendrá más flexibilidad con Spark si está trabajando en Scala. (El beneficio salarial de $ 15k que acompaña a las habilidades de Scala tampoco hará daño). Pero, si este es solo un proyecto único para usted, ¿por qué molestarse? Simplemente codifique el trabajo en Python y termine con él. Si por casualidad le interesa aprender Spark y Scala, Simplilearn tiene un excelente curso que a menudo se ofrece con descuento. Entrenamiento de certificación Apache Spark y Scala

Si y no.

Si recién está comenzando con Spark, realmente no importa dónde comience o con qué comience. Si ya está familiarizado con Python o Scala, úselo. Aprenda a escribir programas Spark en ese idioma y eso sin duda lo hará más rápido en comparación con el aprendizaje de un nuevo lenguaje de programación y Spark.

Pero si no está familiarizado con ninguno de ellos, le recomendaría aprender Scala. Dado que Spark se escribió en Scala, es posible que realmente obtenga un aumento de rendimiento al usar Scala (sobre Java). Y, en general, las aplicaciones Spark escritas en Scala siempre son más rápidas que Python.

Además, no muchas organizaciones desean desarrollar su aplicación con Python, especialmente cuando Scala está disponible, que se ejecuta en una de las plataformas altamente optimizadas, JVM.

Para obtener más información sobre Python Vs Scala, mira mi respuesta aquí: la respuesta de Swaroop a ¿Qué lenguaje de programación es bueno para manejar Hadoop y Spark: Java, Python o Scala?

Una vez que haya decidido con qué idioma irá, es hora de comenzar a aprender Spark.

Si ha elegido Scala como su idioma de elección, estas respuestas le mostrarán el camino para Spark + Scala

La respuesta de Swaroop a ¿Qué libro es bueno para aprender Spark y Scala para principiantes?

La respuesta de Swaroop a ¿Es necesario aprender Scala para aprender Spark?

La respuesta de Swaroop a ¿Cuáles son buenos libros o sitios web para aprender Apache Spark y Scala?

Y, si ha elegido Python, no tengo ninguna respuesta para mostrar la ruta de aprendizaje para eso, ya que realmente no he usado Python para Spark. Pero, aún revisa las respuestas dadas anteriormente. Puede encontrar algo útil. Además, lea esto: la respuesta de Swaroop a ¿Cómo aprendo Apache Spark?

Buena suerte con su jornada.

Apache Spark está desarrollado completamente en Scala. Scala es uno de los lenguajes JVM más simples.

Aquí está la muy buena comparación de Scala vs. Python para Apache Spark:

Espero que esto te ayude. Si tiene más preguntas sobre Apache Spark, envíeme un mensaje.

Esto depende completamente de lo que quieras hacer con la chispa.

Si desea construir una plataforma de análisis de big data a escala empresarial, continúe con Scala. Le ayuda a escalar y, en segundo lugar, a muchos beneficios de rendimiento, ya que HDFS en Java y Spark se desarrollaron en Sacla, subyacente a todo JVM.

Python no es adecuado para aplicaciones vendibles de clase empresarial, y el uso de python con Spark y hadoop pone el rendimiento en desventaja.

La curva de aprendizaje en Python es menor, en escala está en el lado superior, pero lo veo como una inversión de esfuerzo única.

Personalmente, me gustaría usar spark con scala y hay algunos buenos libros y tutoriales disponibles sobre esto.

Si sabe qué significa el término escalabilidad, entonces definitivamente terminará eligiendo SCALA. Scala como su propio nombre sugiere que su propósito principal de diseño es la escalabilidad. Por lo tanto, en diferentes situaciones de resolución de problemas, el rendimiento y la codificación no se verán afectados.
En Big Data tienes que lidiar con grandes cantidades de datos. SCALA es de complejidad lineal cuando el tamaño de los datos aumenta, su rendimiento no disminuirá (especialmente en el marco de Spark) y también la longitud del código (esto no se ajusta estrictamente al concepto cuando entra la imagen de escalabilidad, pero definitivamente es menos detallado que Java)
Si tiene experiencia en programación con Java, le sugiero encarecidamente que elija SCALA. Mi opinión personal dice que en los próximos años el marco SCALA y Big Data con Spark sería la mejor combinación.

Veo el mercado actual Python es la elección de muchos debido a su amplia disponibilidad y habilidades, también fáciles de aprender.

Bueno, esta pregunta se hizo en diciembre, y ha habido mejoras en Spark desde entonces. Según Patrick Wendell, el Administrador de versiones de Spark, el uso de Scala y Python produce beneficios aproximadamente iguales para sus usuarios. Pero, todavía no he usado Spark, así que mi conocimiento se limita a una aparición reciente de Patrick Wendell en el podcast The Data Show de O’Reilly (episodio: “Apache Spark: Encendido de aplicaciones en las instalaciones y en la nube”). Recomiendo escuchar esta entrevista para obtener más información sobre el futuro de Spark.

El rendimiento no es un lavado, pero lo es. Python es lo suficientemente bueno para la mayoría de las cosas. En la curva de aprendizaje y las bibliotecas disponibles, Python gana sin dudas. La facilidad de uso también es fácilmente python por un amplio margen.

Todos deberían saber python. Sin embargo, la naturaleza funcional de Scala es realmente algo hermoso, y lo convertirá en un mejor programador y pensador. Profesionalmente, rockea PyPy [por favor, dioses de la pitón, haz que los pandas trabajen con pypy]. Pero, en la oscuridad de la noche, practica tu scalac.

Además de los puntos mencionados por otros, una de las razones por las cuales Scala es una mejor opción para Spark Professionals es:

Para cualquier problema, cuando realmente no comprende por qué Spark se comporta de la manera en que lo hace: puede ingresar al código de Spark y comprenderlo para obtener información más profunda. [1]

Cuando trabajas con Spark día y noche, invariablemente te encuentras en tales situaciones.

Notas al pie

[1] zekeLabs | Aula y formación en línea

More Interesting

¿Qué no enseñan los bootcamps de ciencia de datos?

¿Por qué hay tantos científicos de datos que usan Python sobre Ruby? ¿Python es realmente mejor que Ruby a este respecto?

¿Cuál es el historial de la base de datos?

¿Cómo se puede pasar de la función de consultor de un MBB a la función de ciencias de datos?

¿Qué tan importante es SAP en la minería de datos?

¿Cuál es la mejor institución para la ciencia de datos en Mumbai?

¿Qué tan importante es el lenguaje de programación R hoy en día? ¿Debo continuar tomando un curso que enseñe el aprendizaje automático a través de la programación R, o ir al curso convencional de aprendizaje automático de Stanford?

¿Cómo puede ayudar la ciencia de datos a impulsar a los países en desarrollo?

¿Cuál es la diferencia entre Data Science y Big Data?

Cómo saber qué datos tiene Acxiom sobre mí

¿Por qué los tutoriales de regresión lineal en los sitios web de aprendizaje de ciencia de datos no discuten la necesidad de satisfacer supuestos de regresión como la linealidad o la homocedasticidad? ¿Las suposiciones de verificación rara vez se hacen en la práctica?

Si me gradúo en 1-1 1/2 años con un programa de doctorado en economía, ¿cómo me preparo para un trabajo de ciencia de datos?

¿Cuáles son algunas buenas conferencias en video sobre aprendizaje automático y aprendizaje profundo?

¿Hay algún buen conjunto de datos para realizar análisis sentimentales? Necesito un conjunto de datos con etiquetas positivas, negativas y neutrales.

¿Cómo es el futuro en Big Data?