Aprendiendo Spark: #1 Introducción
Tags: tutorial, apachespark, python, bigdata
Published: 2021-02-06 19:43:05

---
title: Aprendiendo Spark: #1 Introducción
published: true
description: Introducción y fundamentos básicos del framework de computación distribuida Apache Spark
tags: tutorial, apachespark, python, bigdata
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/16rztt4e7iv48tdphojy.png
//cover_image: https://dev-to-uploads.s3.amazonaws.com/i/2i26wyozw2mq0new2mfk.jpg
---

¡Saludos, camaradas! 👋

En esta serie de artículos entraremos en el mundillo de [Apache Spark](https://spark.apache.org/), el framework por excelencia de computación distribuida desde hace ya unos años.

# ¿Qué es Apache Spark? 💥
Es un framework de computación distribuida escrito en `Scala`, que posee APIs en otros lenguajes como `Python`, `Java` y `R`.

En esta serie de tutoriales escribiremos código en `Python` por ser un lenguaje más popular que `Scala`, y por ser el lenguaje con el que trabajo habitualmente desde hace ya un tiempo.

> `Scala` siempre estarás en mi ❤️, ¡no te olvido!

# ¿Qué es esto de la computación distribuida? ¿Es muy complicado? 🤔

Internamente la computación distribuida tiene su complejidad, no nos vamos a engañar.

La buena noticia es que Spark nos abstrae de un montón de problemáticas *(computación en paralelo, sincronización de nodos, orquestación de operaciones, tolerancia a fallos y un largo etc)* y nos permite centrarnos en lo importante: **escribir el código con la funcionalidad que queremos desarrollar**.

Por lo tanto, siempre será interesante conocer los entresijos de la maquinaria que estamos dirigiendo, pero de momento no nos hará falta.

# Vale, ¿entonces qué necesitamos para empezar?
Lo ideal sería contar un algo de experiencia en programación (si es con `Python` sería magnífico) y algo de experiencia utilizando un IDE ([PyCharm](https://www.jetbrains.com/es-es/pycharm/), [VSCode](https://code.visualstudio.com/)) o un editor de textos acompañado de una terminal si es ese tu arsenal habitual ⚔️

Necesitaremos [Python](https://www.python.org/), así como un [JDK](https://www.oracle.com/es/java/technologies/javase-jdk11-downloads.html), ya que el código `Python` que escribamos se traducirá a *bytecode* y se ejecutará en la `JVM`.

En caso de que estéis desde Windows, existen algunos problemas conocidos, y seguramente sea necesario instalar (WinUtils). Os dejo [un enlace con 5 pasos](https://medium.com/big-data-engineering/how-to-install-apache-spark-2-x-in-your-pc-e2047246ffc3) para poner a punto la instalación en Windows.

Con esta breve introducción vamos dando por finalizado el primer artículo de esta serie...

# ¡Un momento! ¿No nos vas a dar algo para probar? Porfi... 🥺

Bueeeeeeno, vale 😇 Para que podáis comprobar si habéis instalado correctamente todo lo necesario o necesitáis ajustar algo, os pongo un ejemplo para que creéis un nuevo proyecto en vuestro IDE de cabecera.

Primero habrá que instalar el paquete `pyspark` (a día de hoy la última versión es la 3.0.1). Lo podemos instalar a través de `pip` y yo siempre recomiendo usar el fichero `requirements.txt` para garantizar que no nos olvidamos de ninguna dependencia. Por lo tanto, nuestro fichero `requirements.txt` quedaría de la siguiente manera:

```
pyspark==3.0.1
```

Y lo instalaríamos ejecutando `pip install -r requirements.txt`.

Una vez instalado `pyspark`, crearemos un fichero `hola_mundo.py` en el que pegaremos el siguiente código.
 
```python
from pyspark.sql import SparkSession

# Iniciamos Spark de manera local
spark = (SparkSession
         .builder
         .master("local[*]")
         .appName("Hola Mundo")
         .getOrCreate())

# Paralelizamos una lista del 0 al 9 (incluido)
# Computamos la suma de los números
# Obtenemos el resultado en una variable
result = (spark
          .sparkContext
          .parallelize(range(10))
          .reduce(lambda x, y: x + y))

# Imprimimos el resultado
print(f"La suma es {result}")
```

Finalmente lo ejecutaremos, ya sea a través del IDE, o mediante una terminal invocando el intérprete de `Python` y pasándole nuestro fichero `hola_mundo.py` como argumento.

Aparecerán unos cuantos warnings (ni caso) y finalmente veréis el siguiente output:

```
La suma es 45

Process finished with exit code 0
```

Si no habéis tenido tanta suerte, ya tenéis deberes para vuestro tiempo libre 😬

Espero que os haya gustado esta primera entrega. Se aceptan todo tipo de críticas constructivas 🧐

¡Nos vemos, equipo! 🙌

**Edit1**: Añadida dependencia de PySpark
**Edit2**: Reformateo de código para cumplir las [reglas de estilo PEP8](https://www.python.org/dev/peps/pep-0008)