Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
476 · Fundamentos de Big Data · PEC1 · 2019-1 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación
PEC2
Presentación
En esta actividad os enfrentaréis al reto de enfocar los problemas utilizando el paradigma MapReduce y
pondréis Big Data en práctica con una de las tecnologías de BigData más utilizada, Apache Spark.
Competencias
En esta PEC se trabajan las siguientes competencias:
Objetivos
Los objetivos concretos de esta PEC son:
• Apache Spark
Esta PEC tiene dos partes. Una primera parte teórica sobre MapReduce y sus limitaciones. Y después, una
segunda parte práctica con Apache Spark.
1
B0.476 · Fundamentos de Big Data · PEC1 · 2019-1 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación
En esta primera parte debéis pensar cómo solucionar una pregunta concreta sobre unos datos utilizando
MapReduce. Para ello se plantean diferentes preguntas sobre un dataset. Para cada una de las preguntas
debéis escribir un parágrafo describiendo que debería hacer la fase de Map y la fase de Reduce, además,
incluir el pseudocódigo de la solución se valorará positivamente. Finalmente se cerrará esta primera parte
con una(s) pregunta(s) sobre las posibilidades de MapReduce. Con esto empezaréis a ver la dificultad de
atacar un problema con el paradigma MapReduce pero a la vez del potencial que tiene el hacerlo de esta
manera para conseguir resolverlo utilizando el paralelismo.
El dataset sobre el cuál se plantean las preguntas corresponde a los datos de asistencia hospitalaria del
sistema sanitario público de la ciudad de Nueva York de 2016.
Jacobi,Bronx,17/05/2016 9:47,27/05/2016,8771,Mujer,Glaucoma
Lincoln,Bronx,17/05/2016 9:47,30/05/2016,22288,Hombre,Diseases of arteries, arterioles and
capillaries
Lincoln,Bronx,17/05/2016 9:47,01/06/2016,387,Mujer,Meningitis in bacterial diseases classified
elsewhere
Coney Island,Brooklyn,17/05/2016 9:47,21/05/2016,13154,Mujer,Influenza and pneumonia
Bellevue,Manhattan,17/05/2016 9:47,28/05/2016,20464,Hombre,Ischaemic heart diseases
Kings County,Brooklyn,17/05/2016 9:47,25/05/2016,9132,Hombre,Influenza and pneumonia
Central Bronx,Bronx,17/05/2016 9:47,28/05/2016,20455,Hombre,Glaucoma
Lincoln,Bronx,17/05/2016 9:47,29/05/2016,381,Hombre,Cerebrovascular diseases
Lincoln,Bronx,17/05/2016 9:47,04/06/2016,17530,Hombre,Ischaemic heart diseases
Harlem,Manhattan,17/05/2016 9:47,08/06/2016,23369,Mujer,Hernia
Coney Island,Brooklyn,17/05/2016 9:48,30/05/2016,19353,Mujer,Diseases of appendix
Woodhull,Brooklyn,17/05/2016 9:48,22/05/2016,19,Hombre,Ischaemic heart diseases
Coney Island,Brooklyn,17/05/2016 9:49,31/05/2016,7689,Hombre,Diseases of appendix
Bellevue,Manhattan,17/05/2016 9:49,01/06/2016,19725,Mujer,Influenza and pneumonia
Kings County,Brooklyn,17/05/2016 9:49,23/05/2016,5844,Mujer,Malnutrition
Queens,Queens,17/05/2016 9:49,23/05/2016,27402,Hombre,Diseases of peritoneum
Bellevue,Manhattan,17/05/2016 9:49,24/05/2016,26288,Mujer,Malnutrition
Queens,Queens,17/05/2016 9:49,11/06/2016,12418,Hombre,Influenza and pneumonia
Elmhurst,Queens,17/05/2016 9:49,22/05/2016,11342,Mujer,Cranial nerve disorders in diseases
classified elsewhere
Metropolitan,Manhattan,17/05/2016 9:49,20/05/2016,25195,Mujer,Malnutrition
Harlem,Manhattan,17/05/2016 9:49,09/06/2016,19357,Mujer,Ischaemic heart diseases
Las preguntas que se plantean a continuación preguntan sobre el día con más recogidas, etc.
2
B0.476 · Fundamentos de Big Data · PEC1 · 2019-1 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación
A continuación se muestra un ejemplo de pregunta y la respuesta que se espera con el dataset presentado.
La fase de Map procesa de manera individual una línea del archivo de entrada como por ejemplo:
Jacobi,Bronx,17/05/2016 9:47,27/05/2016,8771,Mujer,Glaucoma.
Debemos separar esa línea de entrada en campos, cada coma separa un campo. El campo Hospital ocupa la
posición 0. La salida del Map será una pareja clave valor, teniendo el campo 0 correspondiente al Hospital
como clave y un 1 como valor.
En la fase de Reduce sumaremos los valores agrupando por clave. La entrada de cada reduce es la clave, es
decir, Hospital, seguido de la lista de todos valores para ese Hospital. Lo que debemos hacer es iterar sobre
esa lista sumando cada uno de los elementos. La salida sera una pareja clave valor teniendo como clave el
Hospital para el cual hemos realizado el cálculo y el valor será la suma de cada uno de los elementos de la
lista de valores de la entrada.
Con este resultado del Reduce deberemos buscar la pareja clave-valor con el valor más alto. La clave será el
Hospital con más episodios hospitalarios.
Pseudocódigo: Las líneas que empiezan por ’//’ son explicativas, comentarios, y no afectan a la ejecución.
EmitIntermediate(valuesplit[0], ”1”);
int result = 0;
for each v in values:
result += 1;
(Lincoln, 42535)
(Jacobi, 23562)
(Coney Island, 43324)
(Bellevue, 31124)
3
B0.476 · Fundamentos de Big Data · PEC1 · 2019-1 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación
(Metropolitan, 47565)
(Queens, 38547)
(Woodhull, 39736)
(Kings County, 40485)
…
Esto es lo que se espera para cada una de las siguientes preguntas. Como podéis observar no hemos dado el
resultado de cuál es el Hospital con más episodios, ni el pseudocódigo para obtenerlo. Esa parte no es
necesaria para esta primera parte teórica.
INSTRUCCIONES
Para realizar la primera parte debéis entender cómo funciona el paradigma MapReduce. Cuál es la entrada
de la fase Map y que debe salir de ella. Debéis saber que después se realiza una parte shuffling y sorting. Y
finalmente cuál es la entrada de cada Reduce, que operación se lleva a cabo y que salida tiene.
Para averiguar todo esto debéis leer la documentación del módulo 2 que os hemos provisto y después seguir
con la wiki, hacer clic aquí. Una vez estéis seguros de que entendéis MapReduce estudiar el ejemplo anterior
hasta comprender que se hace en el Map y porqué, y que se hace en el Reduce y porqué.
Una vez tengáis el ejemplo muy claro debéis tomar el ejemplo como si fuera una plantilla para contestar a
las preguntas que tenéis a continuación. De hecho podéis copiar y pegar ese ejemplo y adaptarlo para llevar
a cabo el objetivo de cada ejercicio.
Dado que el pseudocódigo es nuevo para la mayoría de vosotros debéis saber que este ”texto” no se ejecuta.
Así pues, únicamente escribir este código en un editor de texto (word o cualquier otro de vuestra
preferencia).
Cómo obtener la hora y minutos de un campo de fecha: Supongamos que valuesplit[1] contiene la fecha,
podemos hacer lo siguiente: hhmm := valuesplit[1].hora y minutos().
Cómo obtener la hora de un campo de fecha: Supongamos que valuesplit[1] contiene la fecha, podemos
hacer lo siguiente: hh := valuesplit[1].hora().
Cómo obtener el día de la semana de un campo fecha: Supongamos que valuesplit[1] contiene la fecha,
podemos hacer lo siguiente: ds := valuesplit[1].dayofweek().
Cómo recorro varios elementos de un array como el de ”values” de la fase Reduce: Tal y como se
muestra en el ejemplo del enunciado, for each element in values: ¡operación sobre el elemento¿. Por
ejemplo si queremos sumarlos y guardar el resultado en la variable result, for each element in values:
result += 1.
Cómo creo las tuplas del resultado de la fase de Map: Para crear las tuplas del Map utiliza
EmitIntermediate(A, B) donde A es la clave y B el valor.
Cómo produzco los resultados de la fase de Reduce: Cuando necesites enviar valores al resultado del
Reduce utiliza el Emit(A) donde A es un número, una palabra, una tupla, etc. lo que quieras como resultado
de la fase Reduce.
Cómo puedo filtrar: Cuando necesites filtrar en la fase de Map utiliza if CONDICION then:
EmitIntermediate... donde CONDICION es la condición que quieres que se cumpla para emitir los valores.
4
B0.476 · Fundamentos de Big Data · PEC1 · 2019-1 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación
Por ejemplo, si quieres filtrar por los días que son miércoles: if valuesplit[1].weekday() = 3 then:
EmitIntermediate(...), ponemos = 3 porque el 3 corresponde al miércoles.
Ejercicio 2 (1p). ¿Cuál es el hospital con más episodios en el área de diagnóstico principal “Glaucoma” para
niños menores de 10 años?
Ejercicio 4 (1p). Si definimos la estancia de un episodio hospitalario como el número de días entre el ingreso
y el alta (obviamos las horas en el caso del ingreso), ¿cuántos días de estancia suponen para cada hospital
los episodios con área de diagnostico principal “Diseases of appendix”?
Ejercicio 5 (1p). Formula una pregunta sobre el dataset mostrado que no se podría contestar utilizando
MapReduce pero sí con otra metodología/paradigma.
5
B0.476 · Fundamentos de Big Data · PEC1 · 2019-1 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación
Para llevar a cabo los ejercicios utilizaremos la plataforma cloud DataBricks. DataBricks provee de clústers
para ejecutar trabajos de Apache Spark. Los clústers están en Amazon Web Services (AWS). Normalmente
enlazaríamos nuestra cuenta de AWS a nuestro usuario de DataBricks y podríamos empezar a trabajar. Para
esa práctica utilizaremos la Community Edition de DataBricks la cuál es totalmente gratuita y nos aporta un
clúster de 6GB, suficiente para realizar la práctica.
Vamos a utilizar uno de los frameworks más populares de Big Data de hoy en día. Con estos ejercicios os
enfrentaréis a las peculiaridades de esta tecnología y aprenderéis cómo funciona para conseguir resolver
grandes problemas de manera distribuida.
Una vez dentro ya podemos empezar a utilizar la plataforma. Podéis familiarizaros con el menú de la
izquierda. Para daros una idea general, ofrece las siguientes funcionalidades:
• Databricks: Es la página de bienvenida, tenéis acceso directo a las demás secciones y también a la
documentación.
• Home: Despliega una sección lateral que accede a la carpeta de vuestro usuario. Aquí podéis poner
nuevos ficheros.
• Workspace: Despliega una sección lateral con acceso a: Documentación, Notas de la última versión,
Tutoriales, etc.
• Recent: Muestra los elementos a los que se ha accedido recientemente.
• Data: Despliega una sección lateral desde la que podéis crear nuevas tablas y consultar las
existentes.
• Clusters: Desde este menú podéis manejar vuestros clústers y crear nuevos.
• Jobs: Esta sección no está disponible para la versión Community. Se utiliza para ejecutar notebooks
bajo demanda o programar la ejecución para una hora determinada.
• Search: Abre el menú de búsqueda.
De todas estas opciones utilizaremos sobretodo la de Home, Workspace y Data. Podéis explorar los
diferentes menús para familiarizaros con ellos.
Debéis descargar del aula el notebook que hayáis elegido. Los enunciados de esta parte los importaréis
desde databricks. Debéis escoger uno de los dos como hemos mencionado anteriormente. Para importarlo
debéis hacer clic en el menú lateral ’workspace’, seleccionar la flecha al lado del nombre Workspace, y hacer
clic en Importar. Seleccionar File en el menú que se despliega y seleccionar el notebook descargado. Si tenéis
dudas aquí hay instrucciones sobre cómo hacerlo y una imagen animada que muestra el proceso
https://docs.databricks.com/user-guide/notebooks/index.html#importing-notebooks.
Una vez lo hayáis importado, hacer clic en el nuevo elemento que aparecerá dentro del workspace para
abrir el notebook. Seguir las instrucciones que aparecerán en él.
6
B0.476 · Fundamentos de Big Data · PEC1 · 2019-1 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación
Instrucciones Imagen
• Seleccionar Data en el menú de la
izquierda
• Hacer click en “Add Data”
7
B0.476 · Fundamentos de Big Data · PEC1 · 2019-1 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación
Recursos
Recursos Básicos
• Módulo didáctico 2. “Módulo 2. Fundamentos de big data.pdf”
• Módulo didáctico 2.1. “Tecnologías de Big Data”
• Módulo didáctico 2.2 “MapReduce”
Recursos Complementarios
• Wiki. Tecnologías de Big Data
• Hadoop Common
• Comandos HDFS
• Spark Programming Guide
Criterios de valoración
• La PEC se tiene que resolver de forma individual.
• Es necesario mostrar todos los comandos y sentencias para cada pregunta.
• Se valorará tanto el resultado final como el procedimiento.
Este documento se tiene que entregar en el espacio Entrega y Registro de EC del aula antes de las 23:59
del día 24/12/2019.