Taller Analytics Sofia2. Ingesta de los datos. (Parte 1/4)

El objetivo de este taller es crear un sistema de recomendación en base a los ratings de los usuarios, basado en uno de los ejercicios propuestos en el Spark Summit.

 

Utilizaremos uno de los Datasets de Movielens que ya reside en la plataforma. Lo haremos en cuatro pasos:

 

  • Ingesta y preparación de los datos mediante Pipelines.
  • Creación del modelo mediante Notebook.
  • Generación de Ontología
  • Creación de una visualización sencilla.

 

 

Ingesta de los datos

 

Creación Pipeline

 

Vamos a realizar la ingesta de los datos de películas con el Dataflow. Lo primero que hay que hacer es crear un Pipeline desde cero. Dentro de las opciones de Menú de Analytics, ‘Mis Pipelines’, y dentro de esta pantalla, hay que pulsar el botón de ‘Crear’. Aparecerá una ventana en la que introducir el nombre del Pipeline, una descripción y un temporizador, que para esta práctica no aplica:

 

image290

 

Al crear el pipeline accede directamente al espacio de trabajo en el que crearemos el flujo de información.

 

 

Definir Componente Origen

 

Los datos ya están descargados en la máquina de Sofia2. Dependiendo del entorno, la encontraremos en una ruta u otra. Para sofia2.com la ruta es “/datadrive/movielens” mientras que para sofia2-analytic la ruta “/datadrive/ftp/movielens”. En este directorio deberían existir dos ficheros: movies.dat y ratings.dat. Para este pipeline nos interesan los datos de las películas.

 

Si no estuvieran en la máquina, hay que descargarlos para este taller.

 

Primero, es necesario crear un Origen de los datos. Como los ficheros ya residen en la máquina de Sofia2, el componente que se necesita es ‘Directory’. Pulsa sobre el componente y aparecerá en el espacio de trabajo. Verás que salen alertas de errores. No te preocupes, al crear el componente vacío, los parámetros de configuración obligatorios están vacíos.  Eso es justamente lo que hay que hacer en el siguiente paso.

 

image291

 

Pulsa sobre el componente y accederás a su configuración. Para el origen de directorio local, los parámetros de configuración obligatorios son:

 

  • Files → Data Format: Representa el formato de los datos de entrada. Hay diferentes opciones, pero la que se necesita en este ejemplo es ‘Text’.

 

  • Files → Files Directory: Es el directorio de entrada, donde residen los ficheros a leer. En nuestro caso, esta ruta es /datadrive/ftp/movielens. (Si trabajas desde Sofia2.com/console la ruta es /datadrive/movielens).

 

  • Files → Name Pattern: Es la expresión regular con la que buscará los ficheros a cargar dentro del directorio configurado en el parámetro anterior. Nos interesa leer un solo fichero, por lo que hay que asignar a este campo ‘movies.dat’.

 

Dependiendo del formato de entrada elegido, se activa la pestaña correspondiente en la ventana de configuración. Verás que en este caso, la pestaña activa es ‘Text’. Solo tiene un parámetro que es ‘Max Line Length’ que tiene un valor por defecto que no vamos a modificar.

 

Ya está configurado el origen. Para empezar, es muy recomendable echar un vistazo a los datos que se van a leer. Para ello, podemos configurar un destino “Dummy” y previsualizar la información. Para esto, accede a los componentes destino y elige ‘Trash’. Como antes, al pulsar sobre el icono, aparece el componente en el espacio de trabajo. Une origen y destino, y ya casi está preparado este flujo.

 

Como observarás, todavía hay errores de configuración. Esto es porque en la configuración general hay que definir la gestión de registros erróneos. Pulsa en cualquier sitio que no sea un componente dentro del espacio de trabajo. La ventana inferior mostrará la configuración general, y verás que la alerta aparece en la pestaña ‘Error Records’.

 

image292

 

Dentro de esas opciones elige ‘Discard’. Con esto, ya no debería haber errores, pero aun así, vamos a validar el flujo. En las opciones del menú de la barra superior, pulsa sobre el botón ‘Validate’:

 

image293

 

Si todo es correcto, mostrará un mensaje de OK.

 

Ya podemos hacer la previsualización. Dentro del menú anterior, el botón justo a la izquierda de Validate es ‘Preview’. Pulsa sobre él y aparecerá una ventana con unos datos de configuración. Lo único que realmente hay que tener en cuenta para este caso es el check de ‘Write to destinations’. Si está marcado, además de previsualizar los datos los escribirá en destino. Desmárcalo si es está marcado y pulsa sobre ‘Run Preview’:

 

image294

 

En ‘input data’ puedes ver lo que lee en cada registro y en cada uno de los componentes. Si pulsas sobre el componente ‘directory’, verás lo que genera y si pulsas sobre ‘Trash’ lo que recibe. En este caso es lo mismo.

 

 

Procesado de los Datos

 

Ahora vamos a hacer la preparación de los datos. Como has podido   observar en el preview del paso anterior, los campos están separados por ‘::’. El Dataflow, interpreta los separadores como un solo carácter, por lo que no se puede definir como delimitador ‘::’. Esto es lo siguiente que haremos.

 

Por comodidad, vamos a incluir, antes del cambio de delimitador, un renombrado de campos. En el ‘preview’, al desplegar cada registro aparecen los campos definidos. Al leer como formato ‘Text’, para cada línea se genera un campo que por defecto se llama ‘text’. Este es el que vamos a renombrar. Para ello, dentro de ‘Processors’, pulsa sobre ‘Field Renamer’.

 

image295

 

Crea un flujo como el siguiente:

 

image296

 

Ahora hay que configurarlo. Este componente es muy simple. Pulsa sobre él, y en su configuración accede a la pestaña ‘Rename’. En ‘Fields to Rename’ hay que introducir el campo origen y el nombre al que cambiarlo. Escribe como ‘From Field’  ‘/text’ y como ‘To Field’  ‘/datos’.

 

image297

 

Puedes probar a previsualizar para comprobar que efectivamente está renombrando el campo.

 

Ahora ya podemos crear el componente que sustituye el delimitador. Para llevar a cabo esta tarea se pueden usar diferentes processors, concretamente todos los que son ‘Evaluators’. Nosotros lo haremos con el de JavaScript.

 

image298

 

Como siempre, pulsa sobre el componente y crea un flujo como el siguiente:

 

image299

 

Accede a la configuración del componente, y entra en la pestaña ‘Javascript’. Verás un editor de texto que se llama ‘script’, que ya tiene código predefinido dentro. Es la plantilla sobre la que definiremos nuestros cambios. Dentro del bucle ‘for’, añade la siguiente línea de código:

 

records[i].value[‘datos’] = records[i].value[‘datos’].replace(/::/g, “%”);

 

Esta línea lo que hace es reemplazar ‘::’ por ‘%’. Hemos elegido ese delimitador porque los típicos que suelen ser ‘;’, ‘,’ y ‘|’ aparecen en el dataset como parte de los campos. Lanza de nuevo el preview y comprueba que se ha realizado el cambio correctamente.

 

 

Definir componente destino

 

image300

 

De nuevo, pulsa sobre el componente y crea un flujo como el siguiente:

 

image301

 

Accede a la configuración del destino. Hay que modificar 3 pestañas:

 

Hadoop FS: Corresponde a las conexiones y rutas del HDFS

 

  • Hadoop FS URI: hdfs://sofia2-hadoop.cloudapp.net:8020
  • HDFS User: cloudera-scm

 

Output Files: Es la definición de los ficheros de salida, rutas, formato, etc.

 

  • File Type: Text Files
  • Data Format: Text
  • Files Prefix: movie
  •  Directory Template: /user/cloudera-scm/movielens/alias_alumno/

 

Text: Es la configuración del formato elegido en la pestaña anterior.

 

  • Text Field Path: /datos

 

Lanza el ‘preview’ de nuevo y comprueba que los datos llegan correctamente al destino.

 

image302

 

Si todo parece correcto, pulsa sobre el botón ‘Start’, a la derecha del botón de validación que has usado anteriormente. Verás que se abre otra ventana con las estadísticas de los datos que se van leyendo, tiempos de proceso de cada componente, etc. Cuando veas que ya no está leyendo datos, significa que ya ha recorrido todo los ficheros de entrada. Como nosotros no necesitamos más datos que esos, podemos parar el pipeline.

 

¿Sabrías hacer lo mismo para el fichero de ‘Ratings’?

 

¿Sabrías generar el fichero en el HDFS como delimitado, definiendo los nombres de los campos separados por ‘;’?

 

Hasta aquí la primera parte de este taller. En próximos posts seguiremos con él, creando Notebooks para generar el modelo de recomendaciones de películas usando Spark y Scala.

 

Te esperamos!

Taller Analytics Sofia2. Ingesta de los datos. (Parte 1/4)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s