Ejercicios Python Spark
Ejercicios de MapReduce y Spark en Python para la asignatura Cloud Computing and Big Data del Grado de Ingeniería del Software, se ejecutan en una instancia EC2 con una máquina virtual Ubuntu en AWS. Enunciado del profesor
Entorno
- Ubuntu 16.04.3 LTS
- Python 2.7.12
- Spark 2.2.0
- JDK 1.8.0_151
- Scala 2.11.8
Enlace a Github
Ejercicio 1 - MapReduce Programming
1.1 Distributed Grep
Realizar una función similar a la de la herramineta grep para buscar palabras en documentos grandes
- Input: Libro de Moby Dick en .txt
- Output: Número de linea en la que aparece la palabra buscada
Ejecución
$ ./P11_mapper.py < input.txt | sort | ./P11_reducer.py ${PALABRA_BUSCADA} >> output.txt
1.2 Count URL Access Frequency
Contar la frecuencia de cada URL en un log de un servidor web
- Input: Log de apache. Fichero obtenido de MonitorWare
- Output: Tuplas con la frecuencia y la URL
Ejecución
$ ./P12_mapper.py < access_log | sort | ./P11_reducer.py >> output.txt
1.3 Stock Summary
Calcular el precio de cotización promedio diario al cierre de Alphabet Inc. (GOOG) por año desde 2009 usando el patrón MapReduce
- Input: CSV con los datos de cotización de Google. Obtenidos Yahoo Finance
- Output: Tuplas con el año y el precio promedio
Ejecución
$ chmod +x P13_mapper.py P13_reducer.py
$ ./P13_mapper.py < GOOG.csv | sort | ./P13_reducer.py >> output.txt
2.4 Movie Rating Data
Apartado A: Mostrar las películas con su calificación promedio Apartado B: Mostrar las películas con una calificación promedio en los ragos de 1 a 5 pasado por parámetro
- Input: Un fichero CSV con películas y otro con las calificaciones de usuarios. Obtenidos de GroupLens
- Output: Tuplas (en el rango pedido) con el el id de película, título y la calificación promedio
Ejecución A
$ chmod +x P14a_mapper.py P14a_redducer.py
$ ./P14a_mapper.py movies.csv ratings.csv | sort | ./P14a_redducer.py
Ejecución B
$ chmod +x P14b_mapper.py P14b_redducer.py
$ ./P14b_mapper.py movies.csv ratings.csv | sort | ./P14b_redducer.py ${RANGO_DE_CALIFICACION}
Ejercicio 2 - Spark Programming
2.1 Distributed Grep
Realizar una función similar a la de la herramienta grep para buscar palabras en documentos grandes
- Input: Libro de Moby Dick en .txt
- Output: Número de linea en la que aparece la palabra buscada
Ejecución
$ spark-submit P21_spark.py ${PALABRA_BUSCADA}
2.2 Count URL Access Frequency
Contar la frecuencia de cada URL en un log de un servidor web
- Input: Log de apache. Fichero obtenido de MonitorWare
- Output: Tuplas con la URL y su frecuencia
Ejecución
$ spark-submit P22_spark.py
2.3 Stock Summary
Calcular el precio de cotización promedio diario al cierre de Alphabet Inc. (GOOG) por año desde 2009
- Input: CSV con los datos de cotización de Google. Obtenidos Yahoo Finance
- Output: Tuplas con el año y el precio promedio
Ejecución
$ spark-submit P23_spark.py
2.3 Movie Rating Data
Mostrar las películas con una calificación promedio en los ragos de 1 a 5
- Input: Un fichero CSV con películas y otro con las calificaciones de usuarios. Obtenidos de GroupLens
- Output: Tuplas (en el rango pedido) con el el id de película, título y la calificación promedio
Ejecución
$ spark-submit P24_spark.py ${RANGO_DE_CALIFICACION}
Ejercicio 3 - Meteorite Landing
Calcular la masa promedio por año de un tipo de meteorito especificado como un argumento
- Input: CSV que consiste en 45,717 meteoritos e incluye campos como el tipo de meteorito, la masa y el año. Obtenidos de NASA's Open Data Portal
- Output: Lista con el año y la masa media de los meteoritos del tipo especificado
Parametros posibles:
-t tipoMeteoro ['Valid', 'Relict'] (o --tipo)
-c claseMeteoro [una de las clases de meteorio] (o --clase)
Ejecución Map Reduce
$ chmod +x P3_mapper.py P3_reducer.py
$ ./P3_mapper.py < Meteorite_Landings.csv [-Param] [valueParam] | sort | ./P3_reducer.py >> output.txt
Ejecución Spark
$ spark-submit P3_spark.py [-Param] [valueParam]