Pasos a Seguir
1. Instalación de Java
$ sudo apt-add-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt install openjdk-8-jdk
2. Instalación de Scala
$ sudo apt-get install scala
3. Instalación de Python
$ sudo apt-get install python
4. Instalación de Spark y configuración del entorno
Descargamos Spark de la página, lo descomprimimos y copiamos todos sus archivos a la carpeta 'local'
$ sudo curl -O http://d3kbcqa49mib13.cloudfront.net/spark-2.2.0-bin-hadoop2.7.tgz
$ sudo tar xvf ./spark-2.2.0-bin-hadoop2.7.tgz
$ sudo mkdir /usr/local/spark
$ sudo cp -r spark-2.2.0-bin-hadoop2.7/* /usr/local/spark
5. Configurar el entorno
Debemos añadir /usr/local/spark/bin al PATH en el fichero .profile. Para ello debemos editar dicho fichero y añadirle la siguiente linea:
export PATH="$PATH:/usr/local/spark/bin"
Después debemos ejecutar source ~/.profile para actualizar el PATH en la sesión actual. En el caso en el que estemos utilizando una VM en AWS, debemos incluir el nombre del host y la ip a la ruta /etc/hosts. Por ejemplo:
$ cat /etc/hosts
127.0.0.1 localhost
172.30.4.210 ip-172-30-4-210
6. Instación de la librería gráfica Matplotlib
$ sudo apt-get install python-matplotlib
7. Descarga los archivos
Se deben crear 3 carpetas; 'scripts/', 'datasets/' y 'results/' de forma similar a la que se ve en el repositorio. Se copian por tanto los 4 datasets en su carpeta, y los scripts que queramos testar en la correspondiente.
8. Ejecución de los scripts:
Antes de lanzar los scripts, y esto debe hacerse cada vez que arranquemos el computador que estemos usando, debemos especificar qué tipo de codificación queremos que use Python con:
$ export PYTHONIOENCODING=utf-8
Una vez hecho esto, nos situamos dentro de la carpeta 'scripts/' y encargamos a Spark que ejecute el programa. Por ejemplo:
$ spark-submit movies_by_country.py
Los resultados se guardarán automáticamente dentro de la carpeta 'results'. Si el script genera un '.csv', se creará una carpeta con un único archivo dentro. El nombre de este archivo es del tipo 'partxxxx-xxxxx', pero se encuentra ya unido con las demás particiones creadas por Spark. Si por el contrario genera un png, se guardará directamente en la carpeta 'results'.
Aspectos avanzados
Se ha usado la librería 'matplotlib' para ilustrar algunos resultados que no tenían sentido en caso de ser guardados en 'csv', como el número de pelícuals que realiza cada país.
Se ha cambiado el número de particiones de los datos para mejorar el rendimiento. Esto se explica en la sección siguiente.
Se ha explorado la API de los DataFrames de Spark para realizar operaciones como unión de Dataframes