Notebooks Procesando y representando datos en un mapa Leaflet con los Notebooks Sofia2

Los Notebooks Sofia2 (basados en el proyecto open-source Apache Zeppelin) permiten a los científicos de datos crear diferentes modelos y algoritmos desde el Control Panel de la plataforma Sofia2. Desde este entorno web los Data Scientists pueden cargar datos a HDFS, procesarlos con Spark, Spark o Python, consultarlos con HIVE, visualizarlos de diferentes formas y además de todo esto manejar las ontologías Sofia2 desde este entorno.

En este ejemplo de uso de los Notebooks vamos a ver cómo traernos un fichero de un sitio externo, procesarlo con Spark y representar los datos procesados en un mapa OpenStreetMap con Leaflet.

Concretamente estamos hablando de un fichero que ofrece el servicio OpenData del gobierno francés (https://www.data.gouv.fr/fr/) y que contiene los datos de las estaciones de recarga eléctrica de Francia

https://www.data.gouv.fr/fr/datasets/fichier-consolide-des-bornes-de-recharge-pour-vehicules-electriques-irve/

El fichero tiene este aspecto:

Comenzaremos por descargar el fichero hacia el directorio home de nuestro usuario:

Lo siguiente es subir este fichero de nuestro directorio local al sistema de ficheros HDFS de nuestro cluster Hadoop

Una vez en HDFS ya puedo manejar los datos con Spark, en este caso para procesar el CSV usaré la librería com.databricks.spark-csv. Para cargarla en el classpath de Spark lo más sencillo es hacer esto:

Y de esta forma tan sencilla puedo convertir el CSV almacenado en HDFS (load(“/examples/IRVE-201510.csv”)) a un DataFrame (df) y de ahí a una tabla persistente (df.write.saveAsTable)

Y una vez tengo la tabla ya puedo consultar los datos de esta de forma muy sencilla:

Además de representarlos en diferentes formatos:

Finalmente haremos la consulta que queremos representar en el mapa:

Tras esto voy a convertir los datos de la consulta a JSON para poder representarlos fácilmente, para esto usaré la librería Gson.

Haré la consulta, mapeando las columnas de los datos obtenidos a los nombres que quiero usar en el JSON:

Los datos tienen esta pinta:

Y ya solo me queda hacer el HTML+JS para pintar mi mapa, en Zeppelin para incrustar un HTML basta con empezar el párrafo con:

Mi HTML tiene este aspecto:

En él podemos ver que estamos usando Thunderforest como Layer (y un apikey que debéis generar en http://www.thunderforest.com/docs/apikeys/ para evitar la marca de agua).

El código que maneja mi JSON con las estaciones es este:

Que genera un botón Show me the map que al pulsar muestra el mapa con un marker para cada estación:

Además de ver la representación en el propio Notebook si en las opciones del párrafo selecciono Link this paragrah:

Esto me genera un URL en la que veo el mapa:

https://sofia2.com/console/notebook/#/notebook/2D1Y4DKY7/paragraph/20160519-175034_779917343?asIframe

y puedo ir pinchando sobre los diferentes markers:

Notebooks Procesando y representando datos en un mapa Leaflet con los Notebooks Sofia2

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