# Apache Spark

> Un motor open source que reparte el trabajo con datos enormes entre muchas máquinas.

- Nivel: Avanzado
- Temas: Datos
- URL: https://tidbit.legios.com.ar/es/apache-spark/
- En inglés: [Apache Spark](https://tidbit.legios.com.ar/apache-spark/)

**Apache Spark** es un motor open source para procesar datos que son demasiado grandes, o demasiado lentos, para una sola computadora. Vos describís lo que querés (leé estos archivos, filtrá, juntá, agrupá, escribí el resultado) y Spark divide los datos en **particiones**, las manda a muchas máquinas de un cluster, corre los pasos en paralelo y junta la respuesta. Se puede escribir en SQL (**Spark SQL**), Python (**PySpark**), Scala, Java o R.

Nació en la Universidad de Berkeley alrededor de 2009 y se convirtió en un proyecto de Apache, pensado para mejorar a Hadoop MapReduce, que escribía los resultados intermedios en disco entre cada paso. Spark guarda todo lo que puede en memoria y planifica el trabajo completo antes de correrlo, y eso hace mucho más rápidas las tareas de varios pasos. Un **driver** central arma ese plan; los **executors** en las máquinas worker hacen el trabajo, y si uno falla, Spark recalcula solo las partes perdidas.

Hoy Spark es un caballo de batalla de la ingeniería de datos: procesos de ETL nocturnos sobre un data lake, limpieza de miles de millones de eventos, preparación de datos para entrenar modelos de machine learning y procesamiento de streams en tandas chicas. Casi nunca se instala a mano; corre como servicio administrado en Databricks, Amazon EMR, AWS Glue o Google Cloud Dataproc. Para datos que entran en una sola máquina, muchas veces hay herramientas más simples, más rápidas y más baratas.

## Una analogía

Contar los votos de todo un país. Una sola persona tardaría meses; en cambio, cada mesa cuenta su urna al mismo tiempo y le pasa el total a un centro que suma todo. Spark es el sistema que organiza las mesas y las llamadas.

## Para quedarse

- Divide los datos en particiones y las procesa en paralelo en un cluster.
- Guarda los datos intermedios en memoria, y por eso fue mucho más rápido que MapReduce.
- Se usa desde SQL, Python (PySpark), Scala, Java o R.
- Suele correr como servicio administrado, como Databricks, EMR o Glue.

## Para seguir leyendo

- [Apache Spark (sitio oficial, en inglés)](https://spark.apache.org/)
- [¿Qué es Apache Spark? (AWS)](https://aws.amazon.com/es/what-is/apache-spark/)
- [Apache Spark en Wikipedia](https://es.wikipedia.org/wiki/Apache_Spark)

## Términos relacionados

- [Código abierto](https://tidbit.legios.com.ar/es/open-source/): Software cuyo código cualquiera puede leer, usar, cambiar y compartir.
- [SQL](https://tidbit.legios.com.ar/es/sql/): El lenguaje para hacerle preguntas a una base de datos.
- [Python](https://tidbit.legios.com.ar/es/python/): Un lenguaje de programación muy usado, conocido por ser fácil de leer y de escribir.
- [ETL](https://tidbit.legios.com.ar/es/etl/): Sacar datos de sus fuentes, limpiarlos y cargarlos donde se puedan analizar.
- [Data lake](https://tidbit.legios.com.ar/es/data-lake/): Almacenamiento barato donde todos los datos se guardan como archivos crudos.
- [Machine learning](https://tidbit.legios.com.ar/es/machine-learning/): Enseñarle a una computadora con ejemplos en lugar de escribirle cada regla.
- [Streaming de datos](https://tidbit.legios.com.ar/es/data-streaming/): Procesar datos como un flujo continuo de eventos, segundos después de que pasan.
- [Amazon](https://tidbit.legios.com.ar/es/amazon/): Una tienda online con su propia red de envíos, y la empresa que maneja AWS.
