Sei sulla pagina 1di 8

B2.

577 · Fundamentos y usos de Big Data · PEC1 · 2018-2 · 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:

• Capacidad para analizar un problema desde el punto de vista de MapReduce.


• Capacidad para analizar un problema en el nivel de abstracción adecuada en cada situación y
aplicar las habilidades y conocimientos adquiridos para resolverlos.

Objetivos
Los objetivos concretos de esta PEC son:

• Conocer y profundizar el paradigma MapReduce.


• Familiarizarse con el proceso de preparación de datos para el análisis.
• Familiarizarse con el framework de Apache Spark.

Descripción de la PEC a realizar


En esta actividad se pondrá en práctica el paradigma de MapReduce y trabajaréis con una de las
tecnologías más utilizadas en Big Data:

• 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
B2. 577 · Fundamentos y usos de Big Data · PEC1 · 2018-2 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación

PRIMERA PARTE: El paradigma MapReduce y sus limitaciones.

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.

El dataset está organizado de la siguiente manera:

1. Hospital: Nombre del hospital.


2. Barrio: Barrio donde se ubica el hospital
3. Fecha ingreso: Fecha y hora de ingreso.
4. Fecha alta: Fecha y hora de alta.
5. Edad paciente : Edad del paciente (en días) en el ingreso.
6. Sexo paciente: Sexo del paciente.
7. Área de diagnóstico principal: Área donde se clasifica el diagnósitico principal del episodio
hospitalario (utilizando la codificación ICD-10 2016).

Un ejemplo de los datos es el siguiente:

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.

Esta sección está cubierta por la página de la wiki, Ejemplo MapReduce.

2
B2. 577 · Fundamentos y usos de Big Data · PEC1 · 2018-2 · 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.

Cuál es el Hospital con más episodios hospitalarios?

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.

Map(String key, String value):


// key: nombre del documento
// value: contenido del documento

valuesplit := value.separar por coma()


// valuesplit es una lista con cada elemento
// valuesplit[0] corresponde a Hospital
// valuesplit[1] corresponde a Barrio
// ...

EmitIntermediate(valuesplit[0], ”1”);

Reduce(String key, Iterator values):


// key: Corresponde al primer parámetro de EmitIntermediate
// values: una lista de ocurrencias

int result = 0;
for each v in values:
result += 1;

// Vamos a emitir una tupla donde el primer valor será el Hospital


// El segundo valor será la cantidad de veces que ha aparecido
Emit( (key, AsString(result) ) );

Un ejemplo del resultado de esta ejecución sería:

(Lincoln, 42535)
(Jacobi, 23562)
(Coney Island, 43324)
(Bellevue, 31124)

3
B2. 577 · Fundamentos y usos de Big Data · PEC1 · 2018-2 · 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: hhmm := 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
B2. 577 · Fundamentos y usos de Big Data · PEC1 · 2018-2 · 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 1 (1p). ¿Cuál es el barrio con más episodios hospitalarios?

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 3 (1p). ¿Cuál es el día de la semana con más ingresos de mujeres?

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
B2. 577 · Fundamentos y usos de Big Data · PEC1 · 2018-2 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación

SEGUNDA PARTE: Apache Spark.

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.

Preparación del set-up

Primero de todo, utilizando el navegador, os debéis dirigir a https://databricks.com/try-databricks y


debajo de ’COMMUNITY EDITION’ hacer clic en el botón ’START TODAY’. Sobretodo no confundiros con el
’FULL-PLATFORM TRIAL’. Rellenar el formulario que aparecerá. Una vez finalizado el registro entrar a
vuestra cuenta de DataBricks Community Edition.

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.

Instrucciones para obtener los enunciados

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
B2. 577 · Fundamentos y usos de Big Data · PEC1 · 2018-2 · Programa de Business Intelligence y Big Data · Estudios de Informática, Multimedia y Telecomunicación

Para cargar los datos, debéis seguir las siguientes instrucciones:

Instrucciones Imagen
• Seleccionar Data en el menú de la
izquierda
• Hacer click en “Add Data”

• Seleccionar “Create Table in


Notebook”

• Obtención de Notebook de carga


del fichero
• El primer grupo de instrucciones
carga el fichero en un DataFrame

7
B2. 577 · Fundamentos y usos de Big Data · PEC1 · 2018-2 · 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.

Formato y fecha de entrega


La entrega consiste en un documento PDF para los ejercicios de la primera parte. El nombre del fichero
tiene que ser: PEC2-Apellido1Apellido2Nombre-MapReduce.pdf. Y un segundo archivo, el notebook,
con las respuestas de todos los ejercicios de la segunda parte. El nombre del fichero tiene que ser: PEC2-
Apellido1Apellido2Nombre.html.

Este documento se tiene que entregar en el espacio Entrega y Registro de EC del aula antes de las 23:59
del día 22/05/2019.

No se aceptarán entregas fuera de término.

Potrebbero piacerti anche