SlideShare una empresa de Scribd logo
1 de 118
Descargar para leer sin conexión
TRABAJO FIN DE MÁSTER
Máster Universitario en Arquitectura del Software
Big Data: Aplicación y Utilidad en el Sistema Alimentario
Autor/a: Juan Olivera
Director: Juan Alfonso Lara Torralbo
Curso 2015/2016
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 2 -
ÍNDICE
RESUMEN ................................................................................................................................4
1. INTRODUCCIÓN .............................................................................................................6
1.1. Objetivos del trabajo ..........................................................................................8
1.2. Tecnologías empleadas.......................................................................................8
1.3. Beneficios esperados..........................................................................................9
1.4. Organización del resto del documento................................................................9
2. ESTADO DE LA CUESTIÓN ........................................................................................11
2.1. Nutrición.......................................................................................................... 11
2.2. Open Data ........................................................................................................ 12
2.3. Big Data........................................................................................................... 16
2.3.1. Apache Zeppelin...............................................................................................19
2.3.2. Apache Spark ....................................................................................................25
2.3.3. MongoDB..........................................................................................................35
2.4. Aplicaciones de Big Data en el campo de la nutrición...................................... 44
3. DESARROLLO...............................................................................................................46
3.1. Definición de variables e indicadores............................................................... 46
3.1.1. Promedio de sal consumida por país...............................................................46
3.1.2. Promedio de azúcar consumida por país. .......................................................47
3.1.3. Ranking de productos más grasos. ..................................................................47
3.1.4. Distribución de productos menos saludables .................................................48
3.2. Base de datos ................................................................................................... 49
3.2.1. Proceso de carga de datos ................................................................................50
3.2.2. Importación de datos en una instancia local...................................................51
3.2.3. Esquema de datos .............................................................................................52
3.2.4. Población y muestra .........................................................................................55
3.3. Creación de indicadores ................................................................................... 55
3.3.1. Carga de datos ...................................................................................................56
3.3.2. Transformación de datos ..................................................................................59
3.3.3. Visualización de datos......................................................................................64
4. RESULTADOS Y EVALUACION DE LA PROPUESTA............................................75
4.1. Resultados obtenidos........................................................................................ 75
4.2. Evaluación de la propuesta............................................................................... 78
5. CONCLUSIONES Y LÍNEAS FUTURAS.....................................................................85
6. REFERENCIAS BIBLIOGRÁFICAS Y RECURSOS ELECTRÓNICOS....................88
7. ANEXOS .........................................................................................................................92
7.1. Ejemplo de un producto en formato JSON ....................................................... 92
7.2. Información etiquetas de productos................................................................ 110
7.3. Distribución de productos Open Food Facts ................................................... 115
8. AGRADECIMIENTOS.................................................................................................117
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 4 -
RESUMEN
El presente trabajo estudia la nutrición en el mundo a través del análisis de grandes
volúmenes de datos, que son referidos a productos alimenticios consumidos en diferentes
regiones del mundo, con el objetivo de conocer los hábitos alimentarios a escala mundial y
así proporcionar información objetiva y resumida, que contribuya y ayude a los países y/o
organismos a elaborar programas y políticas que permitan abordar problemas de malnutrición
y mejorar la salud de las personas.
El resultado del trabajo se conforma de un conjunto de indicadores alimentarios construidos a
partir del análisis de más de ochenta mil etiquetas de productos alimenticios, provenientes de
una Base de Datos Abierta y Colaborativa, haciendo uso de técnicas, conceptos y
herramientas de Big Data, Open Data y Data Mining.
Esta publicación, que servirá de introducción general a los problemas nutricionales de los
países, pretende aportar una mirada más sobre la nutrición en el mundo así como educar y
generar conciencia sobre nuestra alimentación y cómo influye en nuestra calidad de vida.
Esta publicación será especialmente útil para los organismos y profesionales de la salud así
también como el público en general.
Palabras clave: Nutrición, Salud, Alimentos, Datos Masivos, Datos Abiertos, Datos
Colaborativos, Dieta, Indicadores Nutricionales.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 5 -
ABSTRACT
The present work studies the role of nutrition in the world through the analysis of large
volumes of data related to food products consumption in different parts of the world, with the
aim of finding out the eating habits globally and thus provide objective, reliable and easy to
understand information, that help countries and its governments to create programmed and
policies that allow them to address the nutritional problems and improve health conditions.
The result of this work shows a set of nutrition indicators obtained by analyzing over eighty
thousand food labels from food products from an open database, using tools such as Big
Data, Open Data y Data Mining.
This publication will serve as an introduction to nutrition problems and intends to make a
contribution on the topic, raising awareness of how diet has a direct influence in the quality
of life of human beings.
This work will be particularly useful for organisms and healthcare professionals, as well as
the general public.
Key words: Nutrition, Healthy, Food products, Big Data, Open Data, Collaborative Data,
Diet, Nutritional Indicators.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 6 -
1. INTRODUCCIÓN
Comer es imprescindible para vivir, pero muchas veces comemos por aburrimiento, para
calmarnos, para celebrar, para juntarnos con amigos y/o familia, o simplemente por placer.
En un tiempo en el que vivimos rodeados de estímulos que incitan a comer (programas de
TV, publicidades, supermercados con góndolas rebosantes de alimentos, etc.) y en el que los
alimentos son producidos a gran escala, procesados y manipulados para el consumo, es
importante conocer como están constituidos los alimentos para así saber cómo contribuyen o
repercuten sobre la salud y la calidad de vida de las personas.
La nutrición es uno de los pilares de la salud y es uno de los instrumentos más válidos y
efectivos que tenemos para proteger nuestra salud. Pese a que cada vez hay más información
respecto a cómo alimentarse sanamente, el sobrepeso, la inclinación hacia la comida basura,
los excesos y las enfermedades causadas por una mala nutrición están presentes en la vida de
muchas personas.
Una mala nutrición puede reducir la inmunidad, aumentar la vulnerabilidad a las
enfermedades, alterar el desarrollo físico y mental, y reducir la productividad. “Se estima que
un 30% del cáncer se produce por una mala alimentación” (Escribano)
Hoy en día, los alimentos procesados se han convertido en base de la dieta de las personas,
sustituyendo la comida natural. Un alimento procesado es todo aquel que se encuentra
sometido a un tratamiento que busca brindarle determinadas características: potenciar su
sabor, modificar su textura, agregar valor nutricional y aumentar su durabilidad.
Muchos de estos alimentos contienen grandes cantidades de aditivos que no contribuyen
beneficiosamente a nuestra salud. Una encuesta de la Universidad de Bristol revelo que los
niños que llevaron una dieta rica en alimentos procesados en sus primeros años de vida tenían
una disminución en su coeficiente a diferencia de los que tenía una alimentación alta en
verduras y fibras. Otro estudio de la Universidad de Hawaii reveló que la gente que consumía
más carne procesada tenía una probabilidad más alta un 67% de contraer cáncer de páncreas.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 7 -
“Los alimentos procesados contribuyen hasta en un 75 % de sodio en la dieta.” (Katherine)
Conocer como están constituidos los alimentos es importante para mejorar el estado
nutricional de toda la población. Las etiquetas de los productos alimenticios aportan una
valiosa información que van desde los ingredientes utilizados para su elaboración hasta el
tipo de material utilizado para su envasado.
Para poder descubrir y dar a conocer patrones alimentarios este trabajo se centra en el estudio
de los siguientes datos:
 Categoría del Producto o Alimento. Por ejemplo: Snack
 Ingredientes que lo conforman. Por ejemplo: Aceite de Girasol
 Origen de los ingredientes. Por ejemplo: Perú
 Lugar donde el producto fue confeccionado o transformado. Por ejemplo: Perú
 Aditivos. Por ejemplo: E330 – Ácido Cítrico
 Información Nutricional: Por ejemplo: Proteínas o Colesterol que aporta.
 Países donde el producto es comercializado. Por ejemplo: España
 Lugar donde fue adquirido el producto. Por ejemplo: Meylan, Francia
Datos de información general como ser: página web, código de barra e imagen del producto
no son tenidos en cuenta en este trabajo.
Los datos mencionados anteriormente forman parte de Open Food Facts, un proyecto
colaborativo y abierto, en el que personas desde diferentes partes del mundo contribuyen
aportando datos sobre los productos alimenticios. Cuenta con una base de datos Abierta,
Colaborativa y Libre, que contiene información de las etiquetas de miles de productos
provenientes de diferentes partes del mundo.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 8 -
1.1. Objetivos del trabajo
El objetivo de este trabajo es aportar conocimiento a través de la exploración de dichos datos,
haciendo uso de técnicas, herramientas y conceptos de Big Data y definiendo indicadores
que permitan:
 Conocer los hábitos alimentarios de las diferentes poblaciones.
 Proporcionar conocimiento sobre dieta y salud.
 Aportar datos para ayudar a las regiones y países a abordar los problemas de nutrición
a través de políticas y medidas.
 Reunir e intercambiar información sobre el estado nutricional de los países.
 Contribuir con datos que ayuden a prevenir y abordar la malnutrición en el mundo.
 Impulsar la creación de una industria de alimentos más abierta y transparente.
1.2. Tecnologías empleadas
El resultado del trabajo es presentado haciendo uso del concepto de web notebook, un entorno
interactivo web, en el que se representan los indicadores por medio de diferentes gráficas y a
través del cual pueden explicarse o construirse nuevos indicadores, permitiendo almacenar o
incluir los mismos en otros sitios web, como por ejemplo un blog de nutrición y salud.
Las principales tecnologías utilizadas en este trabajo son:
 Apache Zeppelin.
 Apache Spark.
 MongoDB.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 9 -
1.3. Beneficios esperados
Este estudio resulta beneficioso para:
1. Población: los indicadores alcanzados por este trabajo pretenden mostrar e informar
cómo nos alimentamos las personas de diferentes regiones del mundo con el objetivo
de educar y generar conciencia sobre aquello que comemos y cómo influye sobre
nuestra salud y calidad de vida.
2. Organismos de salud: la información proporcionada por este trabajo contribuye a la
elaboración de políticas y medidas por parte de los organismos de salud, tanto
regional como global, que permitan abordar problemas de malnutrición y
enfermedades asociadas. Por ejemplo creación y/o modificación de leyes, controles y
sanciones, etc.
3. Profesionales de la salud: nutricionistas y dietólogos pueden beneficiarse de este
trabajo al contar con información que les permite conocer mejor los hábitos
alimentarios de diferentes regiones, que productos están disponibles en cada región y
como están conformados esos productos y así poder trabajar no solo con pacientes
locales sino también con pacientes de cualquier parte del mundo.
1.4. Organización del resto del documento
Los capítulos restantes de este documento se organizan en tres capítulos:
En el Capítulo 2 se presenta el estado de la cuestión relacionado con el análisis de grandes
volúmenes de datos aplicado al ámbito de la nutrición y la salud. Se presenta el contexto
actual y las tecnologías relacionadas con este trabajo. También se introduce algunas
soluciones BigData y OpenData implementadas bajo el mismo dominio de aplicación.
Seguidamente, en el Capítulo 3 se presenta los detalles de la solución para la construcción de
un sistema web interactivo que permita el análisis de datos nutricionales con el objetivo de
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 10 -
conocer y descubrir: tendencias, patrones y hábitos alimentarios.
Por último, en el Capítulo 4 se concluye el trabajo, resumiendo los principales resultados.
También se discute el trabajo a futuro.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 11 -
2. ESTADO DE LA CUESTIÓN
2.1. Nutrición
Existen cuatro factores que están en el origen de la mayoría de las enfermedades y cuyos
efectos combinados multiplican su nocividad:
 La mala alimentación
 La falta de ejercicio físico
 El consumo de tóxicos (tabaco, drogas, alcohol, etc.)
 El estrés.
“Los factores de riesgo alimentarios representan el 11% de la pérdida de la salud, mientras
que la mala alimentación se prevé que superará el tabaco como un importante factor de riesgo
de mortalidad para el año 2016.” (Mhurchu, 2013). El profesor Cliona Ni Mhurchu, es el
principal investigador del programa “Effective interventions and policies to improve
population nutrition and health”, un programa construido usando técnicas de Big Data.
Los problemas nutricionales causados por una dieta inadecuada pueden ser de muchos tipos.
Una buena nutrición es la primera defensa contra las enfermedades y nuestra fuente de
energía para vivir y estar activo.
La nutrición comienza con lo que comemos: los productos del sector alimentario y agrícola.
“El 85% de los alimentos que se consumen en la actualidad son procesados” (Hueda, 2016)
Es sabido que la gran mayoría de ellos resulta poco saludable, debido a que tras los procesos
de transformación que experimentan pierden nutrientes y propiedades naturales, e incorporan
aditivos artificialmente creados para tal fin. Estos aditivos, no son bien digeridos por el
organismo, ya que el cuerpo no está preparado para ellos y un consumo desmedido de estos
puede causar enfermedades como diabetes, obesidad, problemas cardiacos e incluso
diferentes tipos de cáncer.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 12 -
"No todos los alimentos procesados son una mala elección. Algunos necesitan ser procesados
para que sean seguros, como la leche, que debe ser pasteurizada para eliminar las bacterias
dañinas. Otros alimentos lo necesitan para ser adecuados para el consumo, por ejemplo,
prensar semillas para hacer aceite”.
"Congelar frutas y verduras preserva la mayoría de las vitaminas, mientras que los productos
en conserva favorecen el almacenamiento y la posibilidad de cocinarlos y comerlos durante
todo el año, a menor costo que los frescos y con menos residuos". (Porter, 2015)
Por defecto o por exceso, los problemas de nutrición incluyen siempre decisiones y prácticas
inadecuadas. Ejemplo de ello, es no interpretar la información nutricional contenida en las
etiquetas de los alimentos.
“Solo el 1.2% de los consumidores comprende el uso e interpreta la información nutricional
de los alimentos”. (Villalpando, 2012)
La educación nutricional es un paso importante para enseñar a los consumidores a elegir
alimentos saludables.
Trabajando sobre nuestros sistemas alimentarios, sobre la forma en la que producimos,
recolectamos, almacenamos, transportamos, transformamos y distribuimos alimentos,
podemos mejorar nuestra dieta, nuestra salud y nuestro impacto sobre los recursos naturales.
Los nuevos desafíos, como el cambio climático, la sostenibilidad ambiental y los rápidos
cambios tecnológicos, están transformando el sistema alimentario.
2.2. Open Data
Compartir información se está volviendo cada vez más fácil gracias al avance de las
comunicaciones, pero también gracias a la mejora de los sistemas de almacenamiento y
análisis, que permiten extraer datos útiles con mayor sencillez.
“El Open Data permite que los datos puedan ser accedidos, usados y redistribuidos por
cualquier persona.” (The Open Data Foundation, 2012)
Compartir datos es importante porque los datos recopilados para una tarea específica pueden
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 13 -
tener valor para otras personas u organizaciones en diferentes contextos y / o por diferentes
razones.
“Cuanto mayor es el grado de apertura de los datos, mayor es el tamaño y la diversidad de la
comunidad que accede a ellos. Así, y de acuerdo al efecto multiplicador de compartir en la
red, el valor de un dataset se incrementará cuanto más fácil sea acceder a él y reutilizarlo.”
(Gartner, 2014)
“El Open Data contribuye a:
 Transparencia y control democráctico
 Participación
 Autoempoderamiento
 Mejoramiento o creación de nuevos productos y servicios
 Innovación
 Mejoramiento en la eficiencia y eficiencia de los servicios públicos
 Medición del impacto de políticas
 Nuevos conocimientos a partir de fuentes de datos combinadas y patrones en grandes
volúmenes de datos” (opendatahandbook, 2014)
Los datos abiertos pueden ser claves para el sistema alimentario global.
“Durante la conferencia G8 llevada a cabo en Londres en Octubre del 2013, fue presentada la
Global Open Data in Agriculture and Nutrition (GODAN).” (Jellema, Meijninger, &
Addison, 2015)
El objetivo de esta iniciativa es la construcción de políticas y el apoyo institucional para la
apertura de datos relevantes para la agricultura y la alimentación en todo el sector público y
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 14 -
privado que permitan alcanzar seguridad alimentaria y nutricional a nivel mundial.
“Los datos abiertos son cruciales para combatir la inseguridad alimentaria y construir un
sistema agrícola sostenible” (Schmidhuber, 2014)
Hoy en día, diversos organismos y países trabajan sobre programas que intentan mejorar la
dieta y aumentar los niveles de nutrición a través de un enfoque centrado en las personas y
los datos.
En 2008, la Organización de las Naciones Unidas para la Alimentación y la Agricultura
(FAO) lanzó CIARD (Coherence in Information for Agricultural Research for Development),
un movimiento global dedicado a la apertura sin restricciones del conocimiento agrícola.
El conocimiento agropecuario es un impulsor clave del crecimiento económico y resulta
esencial para lograr la seguridad alimentaria.
“El interés en garantizar la apertura de los datos agrícola y nutricional está ganando impulso
y dos grandes iniciativas de trabajo como GODAN y CIARD están considerando la unión de
sus esfuerzos” (Sabato, 2014)
El Banco Mundial, continuando con su iniciativa de apertura de datos, lanzo en Octubre de
2012 HealthStats, un nuevo portal web con datos sobre salud, nutrición y población (HNP), a
través del cual es posible poder explorar, visualizar, explotar y descargar sus datos.
El sitio web incluye:
 Visualización de datos animados que muestran las tendencias de las últimas décadas.
 Nueva base de datos de población históricos y proyectados, y estimaciones.
 Posibilidad de intercambio a través de redes sociales y correo electrónico.
Más que dedicar esfuerzos a generar aplicaciones a partir de los datos, resulta sin duda más
beneficioso ofrecerlos vía APIs (Application Programming Interface).
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 15 -
Por ejemplo, Spoonacular pone a disposición de desarrolladores de aplicaciones y empresas,
una API que permite acceder a más de 330k recetas, 80k alimentos y 2000 ingredientes
diferentes. Haciendo uso de ontología de alimentos construye relaciones semánticas entre
ingredientes, recetas y alimentos. Cuenta con un buscador semántico que permite hacer uso
del lenguaje natural para realizar consultas, como "pasteles sin gluten sin azúcar" o
"magdalenas veganas bajas en grasa". También ofrece la posibilidad de calcular
automáticamente la información nutricional para cualquier receta, analizar los costos de
recetas, visualizar las listas de ingredientes, encontrar recetas a base de dietas especiales,
requerimientos nutricionales, o ingredientes favoritos, clasificar recetas en tipos, o incluso
calcular un plan de comidas completo.
Gracias a ello, los desarrolladores y/o empresas pueden crear diferentes tipos de aplicaciones
de alimentos y en especial de nutrición.
Por otro lado, el departamento de agricultura de los Estados Unidos (USDA) expone sus
datos a través de una API que permite interactuar con su base de datos de nutrientes y
alimentos (NDB). Gracias a esta apertura, cualquier persona puede acceder y hacer uso de
datos referidos a nutrición. Pero esto no siempre resulta así, ya que “Para hacer efectivo el
acceso a los datos por parte de cualquier persona es necesario crear un marco común que:
 Permita localizar de forma sencilla las fuentes de datos
 Utilice un lenguaje estándar para la publicación de datos
 Permita trabajar con datos de calidad de manera amigable a personas no expertas en
áreas de programación o análisis de datos” (Torralba, 2014)
Aunque la cantidad de datos de libre acceso, está en constante aumento, todavía hay desafíos
relacionados con la gestión de datos, la concesión de licencias, la interoperabilidad y la
explotación. En este sentido, es necesario desarrollar políticas y prácticas en torno a los datos
abiertos.
Pese a las barreras anteriormente mencionadas, una estrategia de apertura de datos madura y
responsable permite cosechar grandes beneficios.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 16 -
Los datos son esenciales para una buena toma decisiones y si bien, hoy en día contamos con
menos restricciones de derechos de autor, patentes u otras mecanismos de control para
acceder a diversas fuentes de datos, es importante que podamos extraer conocimiento de
ellos. Contar con más datos no siempre es mejor. Para agregar valor es necesario extraer
conocimiento de esos datos y traducir ese conocimiento en nuevos o mejores servicios.
2.3. Big Data
El Big Data, es un concepto que hace referencia al almacenamiento de grandes cantidades de
datos y a los procedimientos usados para encontrar patrones repetitivos dentro de ellos. Se
caracteriza por el crecimiento constante del volumen de datos, la naturaleza variable de los
mismos y la velocidad con la que necesitan ser procesados para ofrecer una rápida respuesta.
“La explotación del Big Data, entendido como activos de información, demandan soluciones
innovadoras y eficientes que ayuden a mejorar el conocimiento y la toma de decisiones.”
(Laney, 2014)
“El Cloud es un facilitador del Big Data y el Internet de las Cosas (IoT), un nuevo
detonante.” (Bastión, 2014)
Así mismo, la explosión de la generación de datos en las redes sociales, a través de las cuales
los ciudadanos se convierten en productores activos de información y los dispositivos
móviles que ofrecen automáticamente información de tiempo y posición, enriqueciendo así
cualquier fuente de información, son otros de los principales orígenes de la ingente cantidad
de información que se genera diariamente.
Las dificultades más habituales vinculadas a la gestión de estas cantidades de datos se centran
en la recolección y el almacenamiento, búsqueda, compartición, análisis, y visualización.
Sin embargo, y en palabras de David Newman, “si bien el Big Data hace que las
organizaciones sean más inteligentes, el open data es lo que conseguirá que realmente se
obtengan más beneficios en el entorno altamente competitivo en el que nos encontramos.”
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 17 -
(Newman, 2014)
Efectivamente, Big Data nos permite comprender qué hay en nuestros datos, mientras que
Open Data permite publicar información para que esta sea transformada en conocimiento.
La conjunción de ambas tecnologías permite la gestión del conocimiento.
En este sentido, “IBM planea lanzar su primer centro de excelencia europeo Watson Health,
que tendrá su sede en Milán, Italia, para respaldar la iniciativa del gobierno de Italia de
establecer en este país un polo internacional de investigación avanzada en Genómica, Big
Data, Envejecimiento y Nutrición, que permita desarrollar una nueva generación de
aplicaciones y soluciones de salud basadas en datos” (IBM, 2016)
IBM Watson es un sistema informático de inteligencia artificial que es capaz de responder a
preguntas formuladas en lenguaje natural. Integra múltiples fuentes de datos (enciclopedias,
diccionarios, tesauros, artículos de noticias, obras literarias, taxonomías, ontologías, etc.) para
encontrar en ellas patrones desconocidos, conexiones ocultas, etc.
Diseñado para permitir el procesamiento de lenguajes naturales, la recuperación de
información, la representación del conocimiento, el razonamiento automático, y
el aprendizaje automático, hace uso de estructuras de computación distribuida como Hadoop
y cuenta ciento de técnicas diferentes para analizar el lenguaje natural, identificar fuentes,
encontrar y generar hipótesis, buscar y puntuar evidencias, combinar y clasificar hipótesis.
En el área de alimentación y nutrición, Chef Watson, una aplicación web desarrollada por
IBM y la firma Bon Appétit que hace uso del motor ofrecido por Watson. Esta aplicación
dirigida al ámbito culinario permite inventar recetas innovadoras a partir de los
conocimientos aprendidos del análisis de las más de 10k recetas provenientes de la base de
datos Bon Appétit, además de que permite conocer cómo se utilizan los ingredientes en
diferentes platos y estilos de cocina. Esta información también se combina con información
acerca de la composición de los alimentos y las preferencias o restricciones dietéticas
(enfermedad celiaca, alergia o sensibilidad a los alimentos) por lo que les permite excluir
ingredientes específicos, permitiendo a la gente para inspirar su imaginación culinaria sin
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 18 -
importar la dieta que siguen.
Neutrino, es otra aplicación que se beneficia de las características de IBM Watson con el
objetivo de mejorar la salud de las madres embarazadas y la salud de sus bebés. Neutrino
ofrece consejos de nutrición personal en tiempo real incluyendo referencias científicas que
son la base para las conclusiones del Neutrino.
“Escribe la pregunta ¿Cuánto café puedo tomar cuando estoy embarazada? En un buscador
Web tradicional, y obtendrás millones de páginas web con infinidad de respuestas y muchas
de ellas contradictorias. Escribe o formula la misma pregunta en Neutrino y obtendrás una
respuesta mucho más científica, útil y semántica” (Hamm, 2015)
Queda en evidencia que nos encontramos ante un sistema experto, que hace uso de las
bondades de IBM Watson, la plataforma tecnológica de computación cognitiva pionera que
permite a los sistemas comprender el mundo de la manera que lo hacemos los humanos: a
través de los sentidos, el aprendizaje y la experiencia, pero que a diferencia de estos, es capaz
de poder analizar grandes volúmenes de información y obtener resultados en tiempo real.
La arquitectura Big Data (generalizada de las soluciones de Business Inteligencie que existen
hoy en día) está compuesta generalmente por cinco capas: recolección de datos,
almacenamiento, procesamiento de datos, visualización y administración. El alcance de este
trabajo comprende tres de las cinco capas:
Capa de Arquitectura Tecnología empleada
Visualización Apache Zeppelin
Procesamiento y Análisis Apache Spark
Almacenamiento MongoDB
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 19 -
2.3.1. Apache Zeppelin
2.3.1.1. Generalidades
Zeppelin es un proyecto basado en el concepto de web notebook, que permite a los científicos
de datos realizar análisis interactivos y colaborativos posibilitando la obtención de datos de
múltiples fuentes y la utilización de diferentes tecnologías y de lenguajes de programación,
como ser: Shell, Spark, SparkSQL, Hive, Elasticsearch, R, etc.
Ilustración 1 - Zeppelin integración
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 20 -
Un web notebook es una aplicación web que permite crear y compartir documentos que
pueden contener código interactivo, fórmulas matemáticas, gráficos y visualizaciones, texto
con formato, etc. Por su naturaleza web, permiten trabajar sobre un interfaz web en lugar de
sobre una Shell.
Ilustración 2 - Zeppelin web notebook
Los notebooks en Zeppelin son multipropósito, por lo que sobre ellos es posible:
 Obtener datos
 Descubrir datos
 Analizar datos
 Visualizar datos
 Compartir datos
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 21 -
Zeppelin ofrece varias ventajas:
 Interfaz simple e intuitiva
 Se integra con múltiples tecnologías y lenguajes.
 Los notebooks pueden ser creados en varios lenguajes
 Interfaz simple e intuitiva (construida sobre Bootstrap y AngularJS)
 Se integra con herramientas de BigData como Hadoop y Spark
 Permite visualizar los datos mediante diferentes tipos de graficas
 Permite compartir los notebooks con diferentes colaboradores
 Permite publicar los resultados para que puedan ser embebidos en websites,
webapps,reportes, etc.
 Tecnología 100% Open Source.
Está construido sobre una arquitectura modular y basada en intérpretes, que permite la
integración con múltiples lenguajes y tecnologías de backend, como por ejemplo:
 Apache Hive QL
 ApacheSpark (SQL, Scala and Python)
 ApacheFlink
 Postgres
 Pivotal HAWQ
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 22 -
 Shell
 Apache Tajo
 AngularJS
 Apache Cassandra
 Apache ignite
 Apache Phoenix
 Apache Geode
 Apache Kylin
 Apache Lens
Ofrece también la posibilidad de crear e implementar nuestros propios intérpretes.
Ilustración 3 - Zeppelin arquitectura
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 23 -
2.3.1.2. Descarga e instalación
Apache Zeppelin actualmente se encuentra bajo Incubación, la fase de preparación de ASF
(Apache Software Foundation) para los productos de código abierto Apache, por lo que la
liberación de versiones es constante.
Existen dos alternativas de instalación:
1. Descargar los binarios de https://zeppelin.incubator.apache.org/download.html
2. Construir los binarios a partir del código subido al repositorio
Para este proyecto, se construirá los binarios a partir del último del código para asegurar tener
los cambios más recientes.
Primeramente, se deben instalar las dependencias necesarias para poder construir los binarios:
sudo apt-get update
sudo apt-get install git
sudo apt-get install openjdk-7-jdk
sudo apt-get install npm
sudo apt-get install libfontconfig
# install maven
wget http://www.eu.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-
bin.tar.gz
sudo tar -zxf apache-maven-3.3.3-bin.tar.gz -C /usr/local/
sudo ln -s /usr/local/apache-maven-3.3.3/bin/mvn /usr/local/bin/mvn
Una vez preparados los requerimientos, es necesario clonar el repositorio para descargar los
sources:
git clone https://github.com/apache/incubator-zeppelin.git /usr/zeppelin
Apache Zeppelin trabaja con varios intérpretes: Spark, Ignite, Scalding. Cada intérprete
requiere de diferentes opciones de instalación. En este proyecto solo instalaremos el
intérprete de Spark.
mvn clean package -Pspark-1.4 -Dhadoop.version=2.4.0 -Phadoop-2.4 -DskipTests
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 24 -
2.3.1.3. Configuración y uso básico
Apache Zeppelin puede ser configurado a través de:
1. Variables de entorno (conf/zeppelin-env.sh)
2. Archivo de configuración (conf/zeppelin-site.xml)
Los detalles de cada configuración pueden ser consultados en
https://zeppelin.incubator.apache.org/docs/0.5.5-incubating/install/install.html
Zeppelin puede ser iniciado y detenido a través de los siguientes comandos:
bin/zeppelin-daemon.sh start
bin/zeppelin-daemon.sh stop
Ilustración 4 - Apache Zeppelin UI
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 25 -
2.3.2. Apache Spark
2.3.2.1. Generalidades
Apache Spark es un framework open source para procesamiento distribuido. Combina un
sistema de computación distribuida a través de clúster de ordenadores con una manera
sencilla de escribir programas. Puede trabajar en modo Standalone o modo clúster
sobre Apache Mesos o Hadoop YARN.
Ilustración 5 - Integración Spark – Hadoop a través de YARN
Spark está diseñado para ejecutarse por defecto en memoria, lo que permite escribir
algoritmos iterativos sin escribir en disco un conjunto de resultados después de cada iteración
como lo haría MapReduce.
MapReduce, revolucionó la manera de trabajar con grandes conjuntos de datos ofreciendo un
modelo relativamente simple para escribir programas que pueden ejecutar paralelamente en
cientos y miles de máquinas al mismo tiempo. Gracias a su arquitectura, MapReduce logra
prácticamente una relación lineal de escalabilidad, ya que si los datos crecen es posible
añadir más máquinas y tardar lo mismo.
Spark mantiene la escalabilidad lineal y la tolerancia a fallos de MapReduce, pero amplía sus
bondades gracias a varias funcionalidades:
 DAG (Directed Acyclic Graph): un grafo dirigido que no tiene ciclos.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 26 -
 RDD (Resilient Distributed Dataset): Un conjunto de datos inmutables, distribuidos y
flexibles.
Se caracteriza por:
 Ser una plataforma de código abierto con una comunidad muy activa (el volumen de
líneas de código y el número de contribuyentes crece año a año)
 Ser una plataforma rápida (gracias al procesamiento de datos en memoria)
 Ser una plataforma unificada para gestionar datos (Una única plataforma para soportar
procesamiento en lotes, procesamiento en tiempo real, algoritmos de Machine
Learning, y procesamiento gráfico).
 Disponer de una consola interactiva (Es posible analizar los datos de forma
interactiva, con la conexión a los clústeres.)
 Proporcionar un conjunto de APIs para trabajar con datos (Es posibles desarrollar
aplicaciones en Scala, Java, Python que aprovechen las características de
procesamiento distribuido ofrecido por Spark)
Spark está una conformada por diferentes plataformas, es por ello que es considerada una
tecnología hibrida.
Ilustración 6 - El ecosistema de proyectos en Spark. Fuente: Databricks
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 27 -
 Spark SQL: permite la consulta de datos estructurados utilizando lenguaje SQL o una
API, que se puede usar con Java, Scala, Python o R.
 Spark Streaming: permite gestionar grandes datos en tiempo real. Esto facilita que
los datos se analicen según van entrando, sin tiempo de latencia y a través de un
proceso de gestión en continuo movimiento.
 MLlib (Machine Learning): contiene algoritmos que dotan a Apache Spark de
muchas utilidades, como la regresión logística y máquinas de vectores de
soporte (SVM); modelos de árbol de regresión bayesiana; técnicas de mínimos
cuadrados; modelos de mezclas gausianas; análisis de conglomerados de K
medias; asignación latente de Dirichlet (LDA); descomposición en valores
singulares (SVD); análisis de componentes principales (ACP); regresión lineal;
regresión isotónica; etc.
 GraphX: un framework de procesamiento gráfico. Proporciona una API para la
elaboración de grafos con los datos.
El gran rendimiento ofrecido Spark se debe en gran parte a su Arquitectura.
Ilustración 7 - Spark arquitectura
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 28 -
Las aplicaciones para Spark se ejecutan como un grupo independiente de procesos en
clústeres, coordinados por el SparkContext. El SparkContext representa el contexto básico de
Spark, y a partir de él se crean el resto de variables que maneja el framework.
El SparkContext puede conectarse a gestores de clúster que son los encargados de asignar
recursos en el sistema.
Una vez conectados, Spark puede encargar que se creen ejecutores (executors) encargados de
la computación en los nodos del clúster.
Los trozos de código propio de los que se encargan estos ejecutores son
denominados tasks o tareas.
Mediante el cache se almacenan los datos en memoria para que no sea necesario acceder a
ellos en disco.El almacenamiento de los datos en memoria caché hace que los algoritmos de
machine learning ejecutados que realizan varias iteraciones sobre el conjunto de datos de
entrenamiento sea más eficiente. Además, se pueden almacenar versiones transformadas de
dichos datos.
Spark ofrece la flexibilidad suficiente para escoger qué datos quedan en memoria y cuáles
pueden volcarse al disco duro porque no son necesarios en ese momento. Eso libera mucho el
procesamiento, aumentando su eficacia.
Ventajas
 Rapidez: Spark es capaz de ejecutar los trabajos por lotes de procesamiento de entre
10 a 100 veces más rápido que el motor MapReduce, principalmente mediante la
reducción del número de escrituras y lecturas de disco.
 Procesamiento Real-Time: En lugar de simplemente procesar un lote de datos
almacenados, como es el caso de MapReduce, Spark también puede manipular los
datos en tiempo real utilizando Spark Streaming. Esta capacidad permite que las
aplicaciones pasen datos a través de una función de software – por ejemplo, para
llevar a cabo análisis al mismo tiempo que los datos son recogidos.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 29 -
 Alta tolerancia a fallos: En lugar de la persistencia o la existencia de checkpoints en
resultados intermedios, Spark recuerda la secuencia de operaciones que llevó a un
determinado conjunto de datos. Así que cuando falla un nodo, Spark reconstruye el
conjunto de datos basado en la información almacenada. Esto proporciona una cierta
estabilidad que permite que no se caiga todo un proceso cuando aparecen fallos en
alguno de los nodos.
 Facilidad de uso: La implementación tanto de procesamiento batch como realtime
sobre la capa de Spark elimina gran parte de la complejidad de MapReduce, y
simplifica el despliegue, mantenimiento y desarrollo de aplicaciones.
 Conectividad, multiplataforma: Un conjunto de APIs para el motor de ejecución de
Spark están disponibles en Java, Python y Scala, lo que permite a los desarrolladores
escribir aplicaciones que se pueden ejecutar sobre la capa de Spark en estos lenguajes.
Spark puede interactuar con los datos en el HDFS (Sistema de archivos de Hadoop),
la base de datos HBase Hadoop, el almacén de datos Cassandra y varias otras capas de
almacenamiento.
Con Spark, un programa típico se organiza de la siguiente manera:
1. A partir de una variable de entorno llamada context se crea un objeto RDD (Resilient
Distributed Dataset) leyendo datos de fichero, bases de datos o cualquier otra
fuente de información.
2. Una vez creado el RDD inicial se realizan transformaciones para crear más objetos
RDD a partir del primero. Dichas transformaciones se expresan en términos de
programación funcional y no eliminan el RDD original, sino que crean uno nuevo.
3. Tras realizar las acciones y transformaciones necesarias sobre los datos, los objetos
RDD deben converger para crear el RDD final. Este RDD puede ser almacenado
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 30 -
Cuando el programa comienza su ejecución crea un grafo similar al de la figura siguiente en
el que los nodos son objetos RDD y las uniones entre ellos son operaciones de
transformación. En la figura, las líneas rojas representan transformación y las verdes
operación.
Ilustración 8 - Tarea Spark grafo de ejecución
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 31 -
El grafo de la ejecución es un DAG (Grafo Acíclico Dirigido) y, cada grafo es una unidad
atómica de ejecución. Un DAG no tiene ciclos, es decir, para cada nodo del grafo no hay un
camino directo que comience y finalice en dicho nodo. Un vértice se conecta a otro, pero
nunca a sí mismo.
Ilustración 9 - DAG (Directed Acyclic Graph)
En comparación con MapReduce, el cual crea un DAG con dos estados predefinidos (Map y
Reduce), los grafos DAG creados por Spark pueden tener cualquier número de etapas. Spark
con DAG es más rápido que MapReduce por el hecho de que no tiene que escribir en disco
los resultados obtenidos en las etapas intermedias del grafo. MapReduce, sin embargo, debe
escribir en disco los resultados entre las etapas Map y Reduce.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 32 -
Un RDD (Resilient Distributed Dataset) permite a los programadores realizar operaciones
sobre grandes cantidades de datos en clusters de una manera rápida y tolerante a fallos. Una
vez que los datos han sido leídos como objetos RDD en Spark, pueden realizarse diversas
operaciones mediante sus APIs. Los dos tipos de operaciones que se pueden realizar son:
 Transformaciones: tras aplicar una transformación, obtenemos un nuevo y
modificado RDD basado en el original.
 Acciones: una acción consiste simplemente en aplicar una operación sobre un RDD y
obtener un valor como resultado, que dependerá del tipo de operación.
Dado que las tareas de Spark pueden necesitar realizar diversas acciones o transformaciones
sobre un conjunto de datos en particular, es altamente recomendable y beneficioso en cuanto
a eficiencia el almacenar RDDs en memoria para un rápido acceso a los mismos.
Spark define dos tipos de operaciones de transformación:
 Narrow transformation: se utiliza cuando los datos que se necesitan tratar están en
la misma partición del RDD y no es necesario realizar una mezcla de dichos datos
para obtenerlos todos. Algunos ejemplos son las
funciones filter(), sample(), map() o flatMap().
 Wide transformation: se utiliza cuando la lógica de la aplicación necesita datos que
se encuentran en diferentes particiones de un RDD y es necesario mezclar dichas
particiones para agrupar los datos necesarios en un RDD determinado. Ejemplos
de wide transformation son: groupByKey() o reduceByKey().
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 33 -
Ilustración 10 - Spark tipos de transformaciones
2.3.2.2. Descarga e instalación
Spark está construido sobre la Máquina Virtual de Java (JVM), por lo que el único pre-
requisito es tener instalado Java 6 o superior.
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-jdk7-installer
A continuación instalamos las herramientas para trabajar con Scala, SBT:
$ sudo apt-get install sbt
Apache Spark puede descargarse desde http://spark.apache.org/downloads.html. Una vez
descargada la versión, procedemos a compilar y ensamblar usando SBT:
$ tar -xvf spark-1.0.1.tgz
$ cd spark-1.0.1
$ sbt/sbt clean compile
$ sbt/sbt assembly
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 34 -
Spark viene con una consola interactiva:
o bin/pyspark (interprete interactivo de Python con Spark)
o bin/spark-shell (interprete interactivo de Scala con Spark)
$ ./bin/spark-shell
Ilustración 11 - Consola interactiva spark-shell
2.3.2.3. Configuración y uso básico
Spark ofrece tres alternativas de configuración:
o Spark properties: controlan la mayoría de los parámetros de aplicación y se pueden
configurar mediante el uso de un objeto SparkConf, o a través de propiedades de
sistema Java.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 35 -
o Environment variables: establecen la configuración (por nodo) a través del script
conf/spark-env.sh
o La configuración referente al logging puede ser manipulada a través del archivo
log4j.properties.
En el sitio oficial de Apache Spark puede encontrarse mayor detalle referido a la
configuración (http://spark.apache.org/docs/latest/configuration.html).
A continuación, se presenta un ejemplo básico de uso:
scala> val textFile = sc.textFile("README.md")
textFile: spark.RDD[String] = spark.MappedRDD@2ee9b6e3
scala> textFile.count() // Number of items in this RDD
res0: Long = 126
scala> textFile.first() // First item in this RDD
res1: String = # Apache Spark
scala> textFile.filter(line => line.contains("Spark")).count() // How many lines
contain "Spark"?
res3: Long = 15
2.3.3. MongoDB
2.3.3.1. Generalidades
MongoDB es una base de datos NoSQLde código abierto orientada a documentos. Esto
quiere decir que en lugar de guardar los datos en registros como en el modelo relacional,
guarda los datos en documentos.
Estos documentos son almacenados en BSON, que es una representación binaria de JSON
(JavaScript Object Notation) y permiten que la integración de los datos en ciertas
aplicaciones sea más fácil y rápida
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 36 -
Su núcleo está basado en el lenguaje Javascript, por lo que se puede usar operaciones escritas
en este lenguaje (por lo general objetos JSON) para hacer consultas en lugar de SQL.
Se modelo se basa en el principio de almacenar los datos en una estructura tipo clave-valor.
Los valores de estas claves son estructuras tipo JSON (llamados documentos), mientras que
las claves son llamados colecciones.
Las colecciones en MongoDB son algo parecido a las tablas en un modelo de base de datos
relacional. Son un grupo de documentos relacionados.
La estructura de almacenamiento es tan flexible que los documentos de una misma colección
pueden tener esquemas o estructuras diferentes, inclusive documentos con campos en común
no tienen necesariamente que tener el mismo tipo de dato.
Ilustración 12 - MongoDB colecciones y documentos
Entre sus principales características podemos nombrar:
 Consultas Ad hoc
MongoDB soporta la búsqueda por campos, consultas de rangos y expresiones regulares. Las
consultas pueden devolver un campo específico del documento pero también puede ser una
función JavaScript definida por el usuario.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 37 -
 Indexación
Cualquier campo en un documento de MongoDB puede ser indexado, al igual que es posible
hacer índices secundarios. El concepto de índices en MongoDB es similar a los encontrados
en base de datos relacionales.
 Replicación
MongoDB soporta el tipo de replicación primario-secundario. Cada grupo de primario y sus
secundarios se denomina replica set. El primario puede ejecutar comandos de lectura y
escritura. Los secundarios replican los datos del primario y sólo se pueden usar para lectura o
para copia de seguridad, pero no se pueden realizar escrituras. Los secundarios tienen la
habilidad de poder elegir un nuevo primario en caso de que el primario actual deje de
responder.
 Balanceo de carga
MongoDB se puede escalar de forma horizontal usando el concepto de shard. El
desarrollador elige una clave de sharding, la cual determina cómo serán distribuidos los datos
de una colección. Los datos son divididos en rangos (basado en la clave de sharding) y
distribuidos a través de múltiples shard. Cada shard puede ser una réplica set. MongoDB
tiene la capacidad de ejecutarse en múltiple servidores, balanceando la carga y/o replicando
los datos para poder mantener el sistema funcionando en caso que exista un fallo de
hardware. La configuración automática es fácil de implementar bajo MongoDB y se pueden
agregar nuevas servidores a MongoDB con el sistema de base de datos funcionando.
 Almacenamiento de archivos
MongoDB puede ser utilizado como un sistema de archivos, tomando la ventaja de la
capacidad que tiene MongoDB para el balanceo de carga y la replicación de datos utilizando
múltiples servidores para el almacenamiento de archivos. Esta función se llama GridFS y es
más bien una implementación en los drivers, no en el servidor, por lo que está incluido en los
drivers oficiales de que MongoDB desarrolla. Estos drivers exponen funciones y métodos
para la manipulación de archivos y contenido a los desarrolladores. En un sistema con
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 38 -
múltiple servidores, los archivos pueden ser distribuidos y replicados entre los mismos y de
una forma transparente, de esta forma se crea un sistema eficiente que maneja fallos y
balanceo de carga.
 Agregación
MongoDB proporciona un framework de agregación que permite realizar operaciones
similares a las que se obtienen con el comando SQL "GROUP BY". El framework de
agregación está construido como un pipeline en el que los datos van pasando a través de
diferentes etapas en los que son modificados, agregados, filtrados y formateados hasta
obtener el resultado deseado. Todo este procesado utiliza los índices existentes y se produce
en memoria. Asimismo, MongoDB proporciona una función MapReduce puede ser utilizada
para el procesamiento por lotes de datos y operaciones de agregación.
 Ejecución de JavaScript del lado del servidor
MongoDB tiene la capacidad de realizar consultas utilizando JavaScript, haciendo que estas
sean enviadas directamente a la base de datos para ser ejecutadas.
Gran parte de la escalabilidad, rendimiento y alta disponibilidad ofrecida por MongoDB se
debe gracias a sus estrategias ofrecidas para Replicación, Fragmentación y Agregación.
 Replicación
MongoDB ofrece alta disponibilidad de datos gracias al uso de replicación. La replicación
permite que los datos estén disponibles en más de un servidor a la vez, para que en el caso de
que uno falle por cualquier motivo, los datos se puedan leer o escribir usando otro servidor.
Al grupo de instancias que poseen la misma información se les denomina replica set o grupo
de replicación. Un replica set en MongoDB está compuesto por 2 tipos principales de
miembros, instancias primarias y secundarias, teniendo una única instancia primaria la cual
aceptará todas las operaciones de escritura provenientes de los sistemas cliente. Las
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 39 -
operaciones de lectura son dirigidas por defecto a la instancia primaria; sin embargo es
posible configurar la lectura a instancias secundarias.
Ilustración 13 - Instancia Primaria Replica Set MongoDB
Estas operaciones que alteran los datos son escritas en un archivo llamado oplog o bitácora de
operaciones, los miembros secundarios replican este archivo del miembro primario y ejecutan
las mismas operaciones sobre su conjunto de datos, esto permite tener la misma información
en las diferentes instancias.
Ilustración 14 - Instancias Secundarias Replica Set MongoDB
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 40 -
Debido a que el procedimiento de replicación se realiza de manera asíncrona, es posible que
clientes que consulten directamente a miembros secundarios no obtengan la información más
reciente.
La arquitectura de los replica set dicta que los miembros deben enviar latidos o pings entre
ellos cada 2 segundos, si en un período de 10 segundos el latido no es devuelto, se marca al
miembro en cuestión como inaccesible.
Cuando no existe un miembro primario, este deja de responder o este es obligado a darse de
baja, es necesaria la elección de un nuevo miembro primario. Dicha elección se basa inicial y
principalmente en la comparación de prioridades de aquellos miembros elegibles (esta
prioridad es por defecto 1, esto para darles a todos los miembros la posibilidad de ser
elegidos). Otro aspecto a considerar es la capacidad que tiene el candidato para conectarse
con la mayoría de los miembros en el grupo.
 Fragmentación (Sharding)
La fragmentación de datos permite separar los datos en diferentes instancias o fragmentos. En
MongoDB la unidad de base de datos que se fragmenta son las colecciones. Por lo tanto una
colección que sea declarada como fragmentada podría poseer distintos documentos en los
fragmentos del cluster. Esta estrategia, permite escalar la base de datos horizontalmente.
Ilustración 15 - Arquitectura cluster fragmentación
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 41 -
o Aplicación y Driver
Las aplicaciones cuando necesitan comunicarse con la base de datos de MongoDB lo hacen a
traves de un driver, estos tienen implementados los métodos y protocolos necesarios para
comunicarse correctamente con la base de datos encapsulando la complejidad del proceso al
desarrollador.
o Fragmento
Un fragmento o shard es aquel que posee los datos fragmentados de las colecciones que
componen la base de datos como tal, este suele estar compuesto por un replica
set preferiblemente; sin embargo en ambientes de desarrollo podría ser una única instancia
por fragmento.
o Router
Debido a que las aplicaciones ven la base de datos como un todo, el router es el encargado de
recibir las peticiones y dirigir las operaciones necesarias al fragmento o fragmentos
correspondiente(s).
o Servidores de configuración
Este tipo de instancias se encargan de almacenar la metadata del cluster de fragmentación, es
decir, qué rangos definen un trozo de una colección y qué trozos se encuentran en qué
fragmento. Esta información es almacenada en caché por el router para lograr un óptimo
tiempo de procesamiento.
 Aggregation
El proceso de agregación define una serie de operaciones (pipeline) a las cuales se somete
una colección para obtener un conjunto de resultados calculados, formateados y/o filtrados de
manera diferente a como se encuentran en los documentos, con el objetivo de agrupar y/o
calcular datos que residen en los documentos de acuerdo a una necesidad particular.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 42 -
Asimismo, MongoDB proporciona una función MapReduce que puede ser utilizada para el
procesamiento por lotes de datos (batch-processing) y operaciones de agregación.
Ilustración 16 –MongoDB aggregate
Ilustración 17 - MongoDB MapReduce
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 43 -
2.3.3.2. Descarga e instalación
MongoDB se encuentra disponible para plataformas: Mac OS X, Linux y Windows. A
continuación describiremos la instalación, configuración y uso básico de MongoDB sobre
una plataforma Linux basado en Debian similar a la propuesta por este trabajo.
Primero debemos importar la llave pública GPG y crear el archivo de fuentes:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
...
$ echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen'
| sudo tee /etc/apt/sources.list.d/mongodb.list
...
A continuación se deben actualizar los repositorios y proceder a la instalación:
$ sudo apt-get update
...
$ sudo apt-get install mongodb-10gen
...
2.3.3.3. Configuración y uso básico
MongoDB ofrece ofrecen varias opciones para el uso de SSL, configuración de
replicación, clusterización, etc. que pueden ser explicitadas a través de un archivo de
configuración:
/etc/mongodb.conf
Para gestionar el servicio de MongoDB basta con ejecutar:
$ sudo /etc/init.d/mongodb [ start | stop | restart ]
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 44 -
2.4. Aplicaciones de Big Data en el campo de la nutrición.
“Existen varias maneras en las cuales el Big Data puede ser aprovechado en la investigación
nutricional:
 Exploración de información de alimentos en venta
 Seguimiento del comportamiento alimentario a través de aplicaciones para
Smartphone.
 Data linkages
 Análisis de datos publicitarios de los fabricantes de alimentos sobre redes sociales”
(Mhurchu, Big Food, Obesity & Poor Diets: Big Data Solutions, 2013)
A continuación, se presentan algunos casos de estudio que han sido formulados y diseñados
haciendo uso de Big Data:
 NutriTrack: Un programa que comenzó en 2013 y que crece año a año. Consta del
desarrollo y actualización de datos sobre los alimentos procesados que se encuentran a
la venta en Nueva Zelanda, incluida la composición nutricional, el tamaño del envase,
el tamaño de la porción, el etiquetado y los ingredientes. Los datos son recogidos a
través de una aplicación para Smartphone. Este estudio permitió a los investigadores
comparar el contenido de sal en los productos entre seis países y del cual se ha
encontrado que el contenido de sal en los productos de Nueva Zelanda son más altos
que en el Reino Unido y Francia.
 FoodSwitch: Una aplicación para Smartphone que permite a los usuarios escanear los
códigos de barras de productos y obtener indicadores acerca del contenido de sal,
grasa y azúcar de los alimentos envasados. La aplicación ofrece opciones de
productos más saludables y permite que los usuarios puedan compartir información a
través de redes sociales. La aplicación se alimenta de múltiples fuentes ya que permite
que los usuarios sean quienes ingresen los productos al sistema desde su Smartphone.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 45 -
 NutriSales: Un programa que alcanza a Nueva Zelanda y que comenzó en 2013 y
tiene planificado terminar en 2018. Compone varias fuentes de datos con el objetivo
de conocer la exposición de la población (tanto a nivel local como regional) al sodio,
grasas saturadas y azúcar presente en los alimentos procesados. Se basa en Nutritrack,
una fuente de datos local que permite conocer los nutrientes de los alimentos, una
fuente de nutrientes global y una base de datos local de venta de productos
alimenticios.
 KidsCam: Este ensayo comenzó en 2014. El objetivo es medir la frecuencia y la
duración de la exposición de los niños en la publicidad de alimentos. La recolección
de datos finalizo en Julio de 2015 y en estos momentos la información ya se encuentra
lista para comenzar a ser analizada. Se analizarán cuatro millones de imágenes
publicitarias, con el objetivo de conocer en qué proporción la comida basura (junk
food), el alcohol y el tabaco contamina el entorno de los niños.
Estamos en las primeras etapas de una revolución mundial de nutrición. Las personas son
cada vez más conscientes de la relación entre la nutrición y la salud, y, gracias a Internet y a
la evolución tanto de las tecnologías, así como de nuevas prácticas como el Open y Big Data,
es posible disponer y colaborar con variadas fuentes de información que pueden ser utilizadas
para ayudar a vivir más saludablemente.
Explotar esta información con el objetivo de presentar indicadores que muestren el impacto
de los alimentos ultra-procesados en la salud y que permitan impulsar la reformulación de
los mismos con la idea de mejorar la salud de la población es el primer paso.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 46 -
3. DESARROLLO
No hay duda de que la industria alimentaria es una actividad que se ha globalizado. Hoy día
podemos encontrar una gran variedad de alimentos en los centros de alimentación, no sólo
por la gran cantidad de marcas, envases, tamaños, formas, sino en lo que se refiere a su
procedencia. Hoy en día, el consumidor encuentra fácilmente productos como frutas,
verduras, salsas, especias, refrescos, diversos tipos de snacks, derivados de lácteos, cereales,
u otros alimentos no tradicionales.
Estudiar la composición de estos productos distribuidos globalmente nos permite conocer los
patrones y hábitos alimentarios en cada región, así también como identificar tendencias
alimentarias.
Este trabajo se centra en el estudio de las descripciones de los productos encontradas en las
etiquetas de los mismos, con el objetivo de generar conocimiento, el cual es representado por
medio de un conjunto de indicadores alimentarios.
Los indicadores se diseñaron teniendo en cuenta una nota descriptiva publicada en Mayo de
2015 por la Organización Mundial de la Salud (OMS, 2015). En ella, la OMS nos ofrece un
compendio, que incluye consejos prácticos, de todos aquellos criterios que considera
necesarios y fundamentales para que nuestra alimentación cumpla el propósito de nutrirnos y
asegurarnos una vida con calidad.
3.1. Definición de variables e indicadores
3.1.1. Promedio de sal consumida por país
Indica que cantidad de gramos de sal que son consumidos en promedio cada 100 gramos de
alimento en cada país. Su valor esta expresado en gramos.
Se calcula en base a los campos sodium_100g y countries_en de la etiqueta de cada
producto.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 47 -
El campo sodium_100g expresa que proporción de sal (expresada en gramos) cada 100
gramos está presente en el producto. Por ejemplo, un valor de 1.11 en el campo sodium_100g
indica que cada 100 gramos de alimento 1.11 gramos de sal son aportados a la alimentación.
El campo countries_en contiene la lista de países en los cuales un producto está expuesto al
consumo. Los países están expresados en idioma ingles y separados por coma.
3.1.2. Promedio de azúcar consumida por país.
Indica que cantidad de gramos de azúcar que son consumidos en promedio cada 100 gramos
de alimento en cada país. Su valor esta expresado en gramos.
Se calcula en base a los campos sugar_100g y countries_en de la etiqueta de cada producto.
El campo sugar_100g expresa que proporción de azúcar (expresada en gramos) cada 100
gramos está presente en el producto. Por ejemplo, un valor de 10.4 en el campo sugar_100g
indica que cada 100 gramos de alimento 10.4 gramos de azúcar son aportados a la
alimentación.
El campo countries_en contiene la lista de países en los cuales un producto está expuesto al
consumo. Los países están expresados en idioma ingles y separados por coma.
3.1.3. Ranking de productos más grasos.
Indica que cantidad de gramos de grasas transgénicas que en promedio aporta cada categoría
de producto en 100 gramos de alimento. Su valor esta expresado en gramos y las categorías
son clasificados dentro de un ranking.
Se calcula en base a los campos trans-fat_100g y main_category_en de la etiqueta de cada
producto.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 48 -
El campo trans-fat_100g expresa que proporción de grasas transgénicas (expresada en
gramos) cada 100 gramos está presente en el producto. Por ejemplo, un valor de 7.6 en el
campo trans-fat_100g indica que cada 100 gramos de alimento 7.6 gramos de grasas
transgénicas son aportados a la alimentación.
El campo main_category_en indica la categoría a la que pertenece un producto y esta
expresada en idioma inglés.
3.1.4. Distribución de productos menos saludables
Refleja cómo se distribuyen los productos en cada región en base a su puntuación nutricional
y en base al porcentaje que representan del total de la población de productos en esa región.
Se calcula en base a los campos countries_en y nutrition-score-uk_100g de la etiqueta de
cada producto.
El campo countries_en contiene la lista de países en los cuales un producto está expuesto al
consumo. Los países están expresados en idioma ingles y separados por coma.
El campo nutrition-score-uk_100g representa el puntaje nutricional definido por la Agencia
de Normas Alimentarias del Reino Unido (Food Safety Agency, FSA) para ese producto.
En Marzo de 2006, la FSA presentó un diseño de etiquetado frontal que combina información
nutricional con un código de colores (semáforo nutricional). El modelo del semáforo
nutricional fue propuesto para permitir a los consumidores evaluar de manera simple y rápida
los niveles de los nutrientes en un producto y conocer cuáles de ellos tiene una composición
nutricional más acorde con las recomendaciones de la Agencia de Normas Alimentarias de
Reino Unido. (Bordonada, 2013)
El modelo utiliza seis nutrientes y la cantidad de fruta o vegetales contenida en 100 gramos
de un alimento para diferenciar entre los alimentos más y menos saludables.
Esto genera una puntuación única en la que los factores negativos (calorías, grasas saturadas,
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 49 -
azúcar y sodio) se compensan con los puntos de factores positivos (proteínas, fibra y fruta
mínimamente procesada o vegetales).
Cada factor negativo contribuye de 0 a 10 puntos, y cada factor positivo contribuye de 0 a 5
puntos. El total de puntos positivos son restan del total de puntos negativos para generar una
puntuación (score) que, oscila entre -15 puntos para los alimentos más saludables y +40
puntos para los alimentos menos saludables.
Ilustración 18 – Modelo de puntuación nutricional definido por la FSA (Food Safety Agency)
3.2. Base de datos
La piedra angular sobre la que sustenta este trabajo es Open Food Facts, una base de datos
abierta y colaborativa que alberga información referida a productos alimenticios distribuidos
en todo el mundo. Estos datos están disponibles bajo licencia ODbL (Open Database
License).
La información en la base de datos constantemente es actualizada gracias a los aportes de una
comunidad global de usuarios y es por ello que la base de datos se encuentra implementada
sobre una base de datos NoSQL como MongoDB. Esta base de datos, de tipo documental le
confiere el rendimiento y escalabilidad que necesita para poder soportar la demanda creciente
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 50 -
de los datos. También su esquema de datos flexible permite que los datos no tengan el mismo
conjunto de campos o estructura, lo que le confiere mayor agilidad y adaptabilidad a los
cambios.
Open Food Facts, también es colaborativa, por lo que cualquier persona con una cuenta de
usuario puede revisar, completar, corregir y agregar nuevos datos. Existe un control de
versiones, que permite que todos los cambios realizados sobre los datos de la base de datos
sean registrados.
3.2.1. Proceso de carga de datos
Los productos pueden ser incorporados a la base de datos por cualquier usuario a través de
alguna de estas dos opciones:
 Aplicación Mobile
 Aplicación Web
La aplicación Mobile permite a los usuarios escanear el código de barras de un producto,
para consultar la información del mismo, así también como tomar y enviar imágenes y datos
de los productos que se deseen incorporar a la base de datos. Se encuentra desarrollada en
HTML y Javascript y hace uso de Phonegap (Apache Córdoba) para portar la aplicación a
diferentes plataformas móviles. Así mismo puede ser descargada desde las tiendas de
aplicaciones (App. Store, Google Play, Windows Phone Store).
La aplicación Web, se encuentra desplegada en Internet. Permite buscar productos a través de
diferentes criterios de búsqueda y cargar la información de nuevos productos. Los resultados
de las consultas pueden ser visualizados a través de algunos indicadores built-in.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 51 -
Ilustración 19 - OpenFoodFacts Mobile
App.
Ilustración 20 - OpenFoodFacts Web App.
3.2.2. Importación de datos en una instancia local.
La información de la base de datos constantemente es actualizada por múltiples usuarios y
Open Food Facts publica sus datasets diariamente en 3 formatos diferentes:
 Database dumps.
 CSV exports.
 RDF exports.
Para este trabajo, se creó una instancia local de la base de datos y se llevó a cabo la
importación de los datos contenidos en el database dump generado el 13 de Enero de 2016.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 52 -
# Start Database
mongod.exe --dbpath C:DesarrolloMongoDBmongodb-win32-i386-3.0.4data
# Restore Database from /openfoodfacts-mongodbdump/dump
## products.bson
## products.metadata.json
mongorestore -h 127.0.0.1 -d openfoodfacts
La base de datos creada localmente cuenta con una única colección donde reside la
información de los productos importados de Open Food Facts.
Ilustración 21 - Base de datos montada en una instancia local de MongoDB
3.2.3. Esquema de datos
Aunque MongoDB es schemaless (sin esquema), cada producto puede ser descripto por
medio de 159 campos (Ver Anexos) y se identifica unívocamente por su código de barra.
Los productos son representados en la base de datos por medio de documentos JSON
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 53 -
(JavaScript Object Notation), pudiendo variar estos en lo que respecta a estructura.
{
...
"generic_name" : "Mini tabletas de chocolate negro con un 70% de cacao
mínimo. Nota: El mismo código de barras coincide con otros chocolates similares",
...
"nutrition_score_warning_no_fiber" : NumberLong(1),
"manufacturing_places" : "Berlín,Alemania",
"nutriments" : {
"sodium" : "0.0196850393700787",
"sugars" : "27.9",
"sugars_value" : "27.9",
"carbohydrates_unit" : "g",
"fat_unit" : "g",
"proteins_unit" : "g",
"nutrition-score-fr_100g" : "23",
"fat" : "42.7",
"carbohydrates_value" : "33.5",
"proteins_serving" : "1.93",
"cocoa_serving" : "70",
"sodium_serving" : "0.00492",
"salt" : "0.05",
...
}
Extracto de un documento JSON contenido en la colección productos.
(Un ejemplo completo puede verse en la sección de Anexos)
La base de datos cuenta con una única colección de productos. Las colecciones en MongoDB
son contenedores para documentos de estructura o concepto similar. La colección productos
contiene la información referida a los productos.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 54 -
> db
openfoodfacts
> show collections
products
system.indexes
> db.products.stats()
{
"ns" : "openfoodfacts.products",
"count" : 81205,
"size" : 1193146012,
"avgObjSize" : 14693,
"numExtents" : 16,
"storageSize" : 1351812288,
"lastExtentSize" : 307535872,
"paddingFactor" : 1,
"paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It
remains hard coded to 1.0 for compati
bility only.",
"userFlags" : 1,
"capped" : false,
"nindexes" : 39,
"totalIndexSize" : 397476240,
"indexSizes" : {
...
},
"ok" : 1
}
Extracto de información de la base de datos.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 55 -
3.2.4. Población y muestra
3.2.4.1. Población
La población analizada en este trabajo está constituida por 81.205 etiquetas de productos
consumidos en 161 Países. Así mismo, cada etiqueta describe un producto por medio de 159
campos de información. (Ver Anexos)
3.2.4.2. Muestra
Todos los productos de la base de datos fueron analizados, pero algunos de ellos fueron
excluidos durante el proceso de selección debido a que la información provista por sus
etiquetas estaba solo parcialmente completa. Al ser una base de datos abierta y colaborativa,
no toda la información de un producto está disponible. Por ello y en virtud de evitar fuertes
variaciones e inconsistencias en los indicadores, aquellos productos no fueron tenidos en
cuenta por el proceso de análisis de datos.
Por lo tanto, la muestra sobre la que están construidos los indicadores está conformada por
38.107 etiquetas de productos. A medida que la información faltante sobre los productos se
complete en la base de datos, la información suministrada por los indicadores resultara más
precisa.
3.3. Creación de indicadores
Para la construcción de indicadores se hizo uso de 3 tecnologías: MongoDB, Apache Spark y
Apache Zeppelin.
La integración de Apache Spark y Apache Zeppelin se realiza a través del archivo de
configuración zeppelin-env.sh de Apache Zeppelin. Mientras que la integración de Apache
Spark con Mongo DB se realiza a traves de la librería Spark-MongoDB.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 56 -
## config for integration with Apache Spark
export ZEPPELIN_MEM="-Xmx1024m"
export ZEPPELIN_JAVA_OPTS="-Dspark.home=/usr/spark"
## load the lib third-party for access to mongoDB
export SPARK_SUBMIT_OPTIONS="--packages com.stratio.datasource:spark-
mongodb_2.10:0.9.2"
La metodología desarrollada para la creación de los indicadores se basó en tres etapas:
1. Carga de datos persistidos en MongoDB.
2. Transformación de datos a través de Apache Spark.
3. Visualización de datos con Apache Zeppelin.
3.3.1. Carga de datos
Los datos persistidos en la instancia local de MongoDB fueron cargados en el
contexto de Spark a través de la librería Spark-MongoDB desarrollada por Stratio.
Esta librería permite leer/escribir datos con Spark SQL desde/hacia colecciones de
MongoDB.
La versión de Spark-MongoDB utilizada en este trabajo es la versión 0.9.2, la cual
trabaja con Scala 2.10, Apache Spark 1.4.0, y MongoDB 3.0.x
Tabla 1 - Dependencias Spark-MongoDB
Spark-MongoDB Apache Spark MongoDB
0.8.2 – 0.9.2 1.4.0 3.0.x
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 57 -
Una vez lograda la integración de Apache Spark con Apache Zeppelin, se procedió a
leer los datos de la instancia de MongoDB para que puedan ser procesados por Spark.
## load the lib third-party for access to mongoDB
z.load("com.stratio.datasource:spark-mongodb_2.10:0.9.2")
import org.apache.spark.sql.SQLContext._
import org.apache.spark.sql._
## load the data to a spark dataframe
val options = Map("host" -> "10.0.2.2:27017", "database" -> "openfoodfacts",
"collection" -> "products")
val df =
sqlContext.read.format("com.stratio.datasource.mongodb").options(options).load
Para ello, primeramente es necesario agregar la dependencia del conector Spark-
MongoDB al contexto de Apache Zeppelin. Apache Zeppelin crea y expone los
contextos de Spark, SQL y Zeppelin a través variables disponibles para ambientes
Python y Scala.
Tabla 2 - Contextos disponibles para ambientes Scala y Python
Contexto Variable
Spark Context sc
SQL Context sqlContext
Zeppelin Context Z
Los datos de la base de datos fueron cargados en un Dataframe de Spark. Un
Dataframe es una colección distribuida de datos organizados en columnas. Es
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 58 -
conceptualmente equivalente a una tabla en una base de datos relacional. Los
Dataframe de Spark pueden ser construidos a partir de una amplia variedad de
fuentes, tales como: archivos de datos estructurados, tablas en Hive, bases de datos
externas, o RDD existentes.
El concepto de Dataframe en Spark está inspirado en los Dataframes introducidos por
lenguajes de scripting como R y Python (Pandas). Son la evolución de los RDDs
(Resilient Distributed Dataset) y tienen por objetivo:
 Mantener todas las ventajas de cálculo paralelizable de los RDD.
 Incluir funcionalidad que no tenían los RDD y si otros lenguajes como R o
Python Pandas.
 Simplificar y potenciar el manejo de los datos.
 Incluir de serie la posibilidad de usar SQL contra la información de los
Dataframes.
 Mejorar las opciones de importación/exportación de los Dataframes.
 Permitir la conversión bidireccional entre RDD y Dataframes.
Ilustración 22- Spark Dataframes (fuente: https://aspgems.com/blog/big-data/migrando-de-pandas-spark-
dataframes)
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 59 -
El Dataframe con los datos cargados desde la base de datos está disponible a través
de la variable df y listo para poder ser analizado por Spark.
## output after load data from database
...
df: org.apache.spark.sql.DataFrame = [sortkey: bigint, completed_t: bigint,
states: string, emb_codes_20141016: string, countries_tags: array<string>,
labels_debug_tags: array<string>, fruits-vegetables-nuts_100g_estimate: string,
status_tags: array<string>, fsa_score: string, last_modified_t: bigint,
photographers: array<string>, ingredients_text: string, quantity: string, brands:
string, origins: string, empty: bigint, traces: string,
interface_version_modified: string, ingredients_debug: array<string>,
checkers_tags: array<null>, emb_code: string, codes_tags: array<string>,
editors_tags: array<string>, product_name: string, informers: array<string>,
ingredients_that_may_be_from_palm_oil_n: bigint, editors: array<string>,
labels_prev_hierarchy: array<string>, creator: string, code: st...
...
3.3.2. Transformación de datos
Una vez construido el Dataframe, es posible manipular los datos para dar
comienzo al análisis de datos. La manipulación de datos puede realizarse a través
de diversas operaciones sobre el Dataframe.
// Create the DataFrame
val df =
sqlContext.read.format("com.stratio.datasource.mongodb").options(options).load
// Show the content of the DataFrame
df.show()
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 60 -
// Print the schema in a tree format
df.printSchema()
// Select only the "nutriments" column
df.select("nutriments").show()
// Select products with “quantity” greater than 100
df.filter(df("quantity") > 100).show()
// Count products by “countries”
df.groupBy("countries").count().show()
Dado que los datos en la base de datos no tienen una estructura fija (al contrario,
su estructura es más bien flexible), los productos no cuentan con la misma
información. Es por ello que fue necesario realizar una transformación y
selección de datos antes de poder construir los indicadores propuestos.
Los indicadores “Promedio de sal consumida por país”, Promedio de azúcar
consumido por país” y “Ranking de productos más grasos” necesitan conocer
donde los productos son consumidos para poder operar. Este dato se encuentra
representado en el atributo countries del documento JSON de cada producto. El
atributo countries contiene una lista separada por coma con todos los países
donde ese producto es consumido. Por lo tanto, es necesario realizar una
transformación para partir la información de un producto en varias partes,
representando cada parte la información de un producto consumido en un país
determinado y asi considerar cada parte en los indicadores. Por ejemplo:
products.take(10).foreach(println)
...
Product(Marks & Spencer Curiously Strong Mints,France,United
Kingdom,96,0,,Groceries,14)
...
La información debe partirse en dos, para que la información sea tenida en
cuenta para ambos países: Francia y UK.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 61 -
productsTransfRDD.take(10).foreach(println)
...
Product(Marks & Spencer Curiously Strong Mints,France,96,0,,Groceries,14)
Product(Marks & Spencer Curiously Strong Mints,United Kingdom,96,0,,Groceries,14)
...
Esto transformación puede hacerse por medio de la operación flatMap sobre el
RDD de productos. Un RDD es dividido en múltiples particiones, las cuales
pueden ser procesadas en diferentes nodos dentro de un clúster de Spark y sobre este
se pueden realizar dos tipos de operaciones:
 Transformaciones
 Acciones
Las transformaciones dan como resultado un nuevo RDD, mientras que las acciones
son operaciones que dan como resultado un valor final hacia el programa controlador
o generan la instrucción de escritura al sistema externo de almacenamiento. Las
acciones fuerzan la evaluación de las transformaciones requeridas por el RDD. Spark
no ejecuta las transformaciones hasta que aparece una acción (Evaluación Lazy).
## examples of transformations on RDD: map, flatMap and filter
...
val productsTransfRDD = productsRDD.map(line =>
line.split("t")).filter(s=>s(0)!="code").filter(_.size ==
159).filter(s=>s(102)!="" & s(117)!="").flatMap(s => s(33).split(",").map(part =>
Product(s(7), part, s(102), s(117), s(99), s(60), s(158))))
...
## examples of actions on RDD: first, foreach, take(n), etc.
...
productsTransfRDD.take(10).foreach(println)
...
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 62 -
La operación flatMap es parecida a la operación map pero produce elementos
múltiples a partir de cada elemento introducido. En nuestro ejemplo, el valor de la
columna countries (representado por s(33)) es particionado (s(33).split(",")) para
cada elemento del RDD de productos y por cada uno de estos valores (países) un
nuevo producto es creado. Esto dará como resultado un nuevo RDD que contendrá
un nuevo producto por cada país de la lista representada por la columna countries.
Por otro lado, las transformaciones filter nos permite excluir aquellos productos que
no contengan toda la información completa que necesitamos para el análisis de los
indicadores (filter(s=>s(102)!="" & s(117)!="")). En el ejemplo, los campos
s(102) y s(117) representan los atributos sugar100g y sodium100g respectivamente.
Con respecto al indicador “Distribución de productos menos saludables”, fue
necesario transformar el RDD de productos en nuevo RDD conteniendo el
continente donde es consumido un producto y no el país propiamente dicho.
productsTransfRDD.take(5).foreach(println)
Result(Luxury Christmas Pudding,United Kingdom,44,0.078740157480315,,Desserts,10)
Result(Luxury Christmas Pudding,United Kingdom,44,0.0787,,Sugary snacks,10)
Result(Pepsi, Nouveau goût !,France,10.4,0.01,,Beverages,2)
Result(7Up,France,10.4,0.0393700787401575,,Beverages,2)
Result(Sour Fruit Gummies,Germany,57.5,0.05,,Sugary snacks,14)
La información debe partirse transformarse reemplazando cada país por el
continente al que pertenece el mismo.
productsTransfRegionRDD.take(5).foreach(println)
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 63 -
Result(Luxury Christmas Pudding,Europa,44,0.078740157480315,,Desserts,10)
Result(Luxury Christmas Pudding,Europa,44,0.0787,,Sugary snacks,10)
Result(Pepsi, Nouveau goût !,Europa,10.4,0.01,,Beverages,2)
Result(7Up,Europa,10.4,0.0393700787401575,,Beverages,2)
Result(Sour Fruit Gummies,Europa,57.5,0.05,,Sugary snacks,14)
Las transformaciones a realizar son similares a las utilizadas en el resto de los
indicadores pero con el agregado de reemplazar cada país por el continente al
que pertenece.
## Arrays of Regions
val regEuropa =
Array("Luxembourg","Bulgaria","Denmark","Portugal","Deutschland","Serbia","Poland"
,"Norway","Andorra","Netherlands","Belgium","Turkey","Ukraine","Other-
turquie","Ireland","Slovenia","Albania","es:Europe","Scotland","Czech
Republic","pt:Holanda","Sweden","Hungary","France","Russia","Germany","Spain","Lit
huania","Romania","Finland","Austria","Switzerland","Greece","United
Kingdom","Italy")
val regAsia = Array("Thailand","India","Other-
japon","Qatar","Indonesia","China","Taiwan","Iraq","Hong Kong","Saudi
Arabia","Israel","Lebanon","Singapore","Japan","Kuwait","United Arab
Emirates","South Korea")
val regAfrica = Array("Egypto","Senegal","Algeria","South
Africa","Tunisia","Morocco")
val regAmericaNorte = Array("Mexico","United States","Canada","Cuba")
val regAmericaSur = Array("Colombia","Chile","Brazil","Argentina","Aruba")
val regOceania = Array("New Zealand","Australia")
## build new RDD
val df = productsTransfRDD.toDF()
val data = df.map(row => {
val row1 = row.getAs[String](1)
val make = if (regEuropa contains row1) "Europa"
else if (regAsia contains row1) "Asia"
else if (regAfrica contains row1) "Africa"
else if (regAmericaNorte contains row1) "AmericaNorte"
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 64 -
else if (regAmericaSur contains row1) "AmericaSur"
else if (regOceania contains row1) "Oceania"
else "Other"
Result(row.getAs[String](0),make,row.getAs[String](2),row.getAs[String](3
),row.getAs[String](4),row.getAs[String](5),row.getAs[Integer](6))
})
Esta transformación se apoya en un conjunto de Arrays que contienen los países
pertenecientes a cada continente o región (regAmericaSur, regAmericaNorte,
etc.). Mediante la función map, por cada elemento del RDD se obtiene el pais
(row.getAs[String](1)) y se reemplaza por el continente al que pertenece ese pais
apoyándose en los Arrays definidos previamente. El resultado de esta
transformación es un nuevo RDD (data) conteniendo la información de productos
clasificada por Continente.
Una vez transformados los datos, los mismos son registrados mediante tablas temporales (en
memoria) y disponibles para ser consultados a traves de SQL Spark.
## on paragraph indicators 3.1.1, 3.1.2 and 3.1.3
...
products.toDF().registerTempTable("products")
## on paragraph indicators 3.1.1, 3.1.2 and 3.1.3
...
data.toDF().registerTempTable("result")
3.3.3. Visualización de datos
En esta tercer y última etapa el resultado del análisis de datos de cada indicador
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 65 -
fue representado por medio de diferentes graficas con el objetivo de simplificar
el análisis de los mismos.
Estas graficas pueden ser construidas sobre Apache Zeppelin a través del
intérprete Spark SQL, el cual permite acceder al contexto de Spark por medio del
lenguaje SQL y así consultar la información procesada por este. Este trabajo está
enfocado en el uso de las visualizaciones built-in provistas por Zeppelin, pero
otras visualizaciones también pueden lograrse por medio de otros intérpretes.
Zeppelin ofrece distintas maneras de visualizar una misma información
consultada a través del intérprete SQL:
 Por medio de tablas
 Por medio grafico de barras
 Por medio grafico de barras agrupadas
 Por medio grafico de barras seccionadas
 Por medio grafico de líneas
 Por medio grafico circular
 Etc.
Estas visualizaciones son dinámicas, permitiendo visualizar la misma
información desde diferentes perspectivas o enfoques.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 66 -
Ilustración 23 - Visualización por medio de tabla
Ilustración 24 - Visualización por medio de grafico de barras agrupadas
Ilustración 25 - Visualización por medio de grafico de dispersión
3.3.3.1. Promedio de sal consumida por país
El consumo de sal en un país, depende en gran parte de la proporción de sodio
que aporta cada uno de los alimentos que el sistema alimentario distribuye en ese
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 67 -
país. Así, si las cadenas de distribución de alimentos ponen a disposición de la
población, alimentos con alto contenido de sal, la probabilidad de que la
población consuma este tipo de alimentos es mayor, como así también el riesgo
de padecer enfermedades como la hipertensión.
Ilustración 26 - Consulta sobre Spark SQL: Promedio de sal por país
A través del intérprete Spark SQL, es posible ejecutar una consulta sobre la tabla
products y conocer para cada país, cuanta sal en promedio aportan los productos
que están expuestos a ser consumidos por su población.
La tabla products reside en memoria y fue creada durante el proceso de
transformación de datos.
// create a temporal table on the SparkContext with the info processed
...
products.toDF().registerTempTable("products")
...
Esta tabla contiene un conjunto reducido y transformado de la información de los
productos contenida en la base de datos. Cada registro de la tabla se representa
por medio de la clase Product.
// Structure for represent data of a product after that it was analyzed
case class Product(
product:String,
countriesSold:String,
sugar100g:String,
sodium100g:String,
transFat:String,
category:String,
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 68 -
nutritionScore:String
)
Para este indicador, de cada Producto nos interesa conocer:
 countriesSold: El país donde el producto es vendido
 sodium100g: La cantidad de sal que el producto aporta cada 100g de
alimento.
Para el análisis de la información se optó por una visualización en forma de grafico de
barras, pero es posible de manera interactiva optar dinámicamente por otros tipos de
visualización de acuerdo al enfoque que se quiera dar a los datos.
Ilustración 27 - Indicador: Consumo de sal promedio por país (vista grafico barras)
3.3.3.2. Promedio de azúcar consumida por país
Del mismo modo que el consumo de sal en un país, depende en gran parte de la
proporción de sodio que los alimentos expuestos al público aportan, el consumo de
azúcar de un país se puede determinar por la cantidad de azúcar que aportan aquellos
productos que son ofrecidos a su población. Explorar esta información nos permite
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 69 -
conocer que regiones están expuestas a mayores riesgos respecto de enfermedades
crónicas como la diabetes.
Ilustración 288 - Consulta sobre Spark SQL: Promedio de azúcar por país
Del mismo modo que el indicador anterior, se apoya en los datos procesados y
reducidos obtenidos del proceso de transformación, y registrados en la tabla
temporal products, para conocer cuanta azúcar en promedio aportan los
productos que están expuestos a ser consumidos por cada país.
De cada Producto nos interesa conocer:
 countriesSold: El país donde el producto es vendido
 sugar100g: La cantidad de azúcar que el producto aporta cada 100g de
alimento.
// Structure for represent data of a product after that it was analyzed
case class Product(
product:String,
countriesSold:String,
sugar100g:String,
sodium100g:String,
transFat:String,
category:String,
nutritionScore:String
)
Para el análisis de la información se optó por una visualización en forma de grafico de
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 70 -
barras, pero es posible de manera interactiva optar dinámicamente por otros tipos de
visualización de acuerdo al enfoque que se quiera dar a los datos.
Ilustración 29 - Indicador: Consumo de azúcar promedio por país (vista grafico barras)
3.3.3.3. Ranking de productos más grasos
De todas las grasas, la grasa trans es la peor para su salud. Consumir demasiada
grasa trans en la alimentación incrementa el riesgo de padecer enfermedades
cardiovasculares, muerte súbita de origen cardiaco y diabetes. Las grasas trans se
presentan cuando los fabricantes de alimentos convierten aceites líquidos en
grasas sólidas con propósitos de conservación, estabilidad y reducción de costos
en la elaboración de los productos.
Por medio de este indicador podemos explorar los datos en busca de aquellas
categorías de alimentos que contengan mayor proporción de grasas trans con el
objetivo de excluirlos o reemplazarlos de nuestra dieta.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 71 -
Ilustración 30 - Consulta sobre Spark SQL: Ranking de productos más grasos
Trabaja sobre la misma estructura de datos que los anteriores indicadores y de la
cual nos interesa conocer:
 category: La categoría principal a la que corresponde el producto.
Ejemplo: Mermeladas.
 transFat: El país donde el producto es vendido
// Structure for represent data of a product after that it was analyzed
case class Product(
product:String,
countriesSold:String,
sugar100g:String,
sodium100g:String,
transFat:String,
category:String,
nutritionScore:String
)
Para el análisis de la información se optó por una visualización en forma de grafico
circular, pero es posible de manera interactiva optar dinámicamente por otros tipos de
visualización de acuerdo al enfoque que se quiera dar a los datos.
Ilustración 311 – Proporción de grasas trans en los 7 productos más grasos
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 72 -
El ranking construido define 7 categorías de producto, pero este número puede ser
variable y puede configurarse dinámicamente para que construir ranking 5, ranking 10,
ranking n, siendo ‘n’ el número de categorías que interese estudiar.
Ilustración 322 - Parámetro de formulario para ranking ‘n’
3.3.3.4. Distribución de productos menos saludables
Por medio de este indicador podemos conocer acerca de la distribución de alimentos en
cada región en base a su puntuación nutricional. Trabaja sobre el concepto de nutrition
score definido por la por la Agencia de Normas Alimentarias del Reino Unido (FSA).
Cada producto tiene una puntuación nutricional que va desde los -14 para los alimentos
más saludables hasta +40 para los alimentos menos saludables. El objetivo de este
indicador es conocer para cada región si su alimentación está basada en alimentos
saludables o alimentos poco saludables.
Ilustración 33 - Consulta sobre Spark SQL: Distribución de alimentos más y menos saludables por
continente
Trabaja sobre la tabla temporal result la cual reside en memoria y que fue creada durante
el proceso de transformación de datos.
// create a temporal table on the SparkContext with the info processed
...
data.toDF().registerTempTable("result")
...
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 73 -
Esta tabla contiene un conjunto reducido y transformado de la información de los
productos contenida en la base de datos. Cada registro de la tabla se representa
por medio de la clase Result.
// Structure for represent data of a product after that it was analyzed
case class Result(
product:String,
countriesSold:String,
sugar100g:String,
sodium100g:String,
transFat:String,
category:String,
nutritionScore:Integer
)
Para la construcción de este indicador, nos interesa conocer:
 countriesSold: Representa el continente donde el producto es ofrecido
 nutritionScore: El puntaje nutricional definido por UK FSA
 cantProductos (calculado con funciones de agregación): Representa la
cantidad de productos para un puntaje nutricional y continente dados.
 averageProd: (calculado con funciones windows de Spark): Indica que
porcentaje del total representa la cantidad de productos definida por
cantProductos.
Las funciones windows permiten a los usuarios de Spark SQL ejecutar funciones
de agregación tales como promedios, rankings, etc. sobre un rango de filas y no
sobre todo el conjunto.
Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera
- 74 -
Ilustración 34 - Indicador: Distribución de alimentos más y menos saludables por continente (tabla)
Para el análisis de la información se optó por una visualización en forma de grafico de
dispersión, pero es posible de manera interactiva optar dinámicamente por otros tipos de
visualización de acuerdo al enfoque que se quiera dar a los datos.
Ilustración 35 – Indicador: Distribución de alimentos más y menos saludables por continente (grafico
dispersión)
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?
¿Como puede ayudar el Big Data al sector alimentario?

Más contenido relacionado

La actualidad más candente

La actualidad más candente (9)

Presentación métodos diferencias
Presentación métodos diferenciasPresentación métodos diferencias
Presentación métodos diferencias
 
102947683 ntc-529
102947683 ntc-529102947683 ntc-529
102947683 ntc-529
 
El pan
El panEl pan
El pan
 
INPREX
INPREXINPREX
INPREX
 
Elaboracion De Mortadela
Elaboracion De MortadelaElaboracion De Mortadela
Elaboracion De Mortadela
 
FAO - leche y productos lacteos
FAO - leche y productos lacteosFAO - leche y productos lacteos
FAO - leche y productos lacteos
 
6 encurtidos
6 encurtidos6 encurtidos
6 encurtidos
 
Practica nº4 morcilla
Practica nº4 morcillaPractica nº4 morcilla
Practica nº4 morcilla
 
Estadistica 1
Estadistica 1Estadistica 1
Estadistica 1
 

Similar a ¿Como puede ayudar el Big Data al sector alimentario?

Problemas que inciden en la SA
Problemas que inciden en la SAProblemas que inciden en la SA
Problemas que inciden en la SALizeth Ruiz
 
Reporte final
Reporte finalReporte final
Reporte finalalhedenis
 
Informe final de investigacion
Informe final de investigacionInforme final de investigacion
Informe final de investigacionCesar Torres
 
DOCUMENTO PROYECTO DE EMPRENDIMIENTO BIG BALANCE
DOCUMENTO PROYECTO DE EMPRENDIMIENTO BIG BALANCEDOCUMENTO PROYECTO DE EMPRENDIMIENTO BIG BALANCE
DOCUMENTO PROYECTO DE EMPRENDIMIENTO BIG BALANCEgroupbook099
 
Nuevas tecnologías; posibilidades de apoyo a la investigación en red
Nuevas tecnologías; posibilidades de apoyo a la investigación en redNuevas tecnologías; posibilidades de apoyo a la investigación en red
Nuevas tecnologías; posibilidades de apoyo a la investigación en redanapelmen
 
Proyecto%20 avance %20nutrición%20docx[1]
Proyecto%20 avance %20nutrición%20docx[1]Proyecto%20 avance %20nutrición%20docx[1]
Proyecto%20 avance %20nutrición%20docx[1]Jose Alvarado
 
Proyecto%20 avance %20nutrición%20docx[1]
Proyecto%20 avance %20nutrición%20docx[1]Proyecto%20 avance %20nutrición%20docx[1]
Proyecto%20 avance %20nutrición%20docx[1]Jose Alvarado
 
texto cientifico.pdf
texto cientifico.pdftexto cientifico.pdf
texto cientifico.pdfElenaTume
 
Articulo impacto ambiental por la producción de carnes y lácteos en Latinoame...
Articulo impacto ambiental por la producción de carnes y lácteos en Latinoame...Articulo impacto ambiental por la producción de carnes y lácteos en Latinoame...
Articulo impacto ambiental por la producción de carnes y lácteos en Latinoame...CampuzanoDeLaTorreJo
 
Alimentación y cáncer Prevención y tratamiento
Alimentación y cáncer Prevención y tratamientoAlimentación y cáncer Prevención y tratamiento
Alimentación y cáncer Prevención y tratamientoAprende de Todo
 
salud publica bajo consumo de frutas y verduras
salud publica bajo consumo de frutas y verdurassalud publica bajo consumo de frutas y verduras
salud publica bajo consumo de frutas y verdurasHaLu HamiltonyLuisa
 
A l i m e n t o sfun
A l i m e n t o sfunA l i m e n t o sfun
A l i m e n t o sfunjarvistic
 
GUIA DE ALIMETACION
GUIA DE ALIMETACIONGUIA DE ALIMETACION
GUIA DE ALIMETACIONMarco Jara
 

Similar a ¿Como puede ayudar el Big Data al sector alimentario? (20)

Problemas que inciden en la SA
Problemas que inciden en la SAProblemas que inciden en la SA
Problemas que inciden en la SA
 
Reporte final
Reporte finalReporte final
Reporte final
 
Informe final de investigacion
Informe final de investigacionInforme final de investigacion
Informe final de investigacion
 
DOCUMENTO PROYECTO DE EMPRENDIMIENTO BIG BALANCE
DOCUMENTO PROYECTO DE EMPRENDIMIENTO BIG BALANCEDOCUMENTO PROYECTO DE EMPRENDIMIENTO BIG BALANCE
DOCUMENTO PROYECTO DE EMPRENDIMIENTO BIG BALANCE
 
INFORME FINAL
INFORME FINALINFORME FINAL
INFORME FINAL
 
Trabajo investigacion
Trabajo investigacionTrabajo investigacion
Trabajo investigacion
 
Expediente electronico health
Expediente electronico healthExpediente electronico health
Expediente electronico health
 
Nuevas tecnologías; posibilidades de apoyo a la investigación en red
Nuevas tecnologías; posibilidades de apoyo a la investigación en redNuevas tecnologías; posibilidades de apoyo a la investigación en red
Nuevas tecnologías; posibilidades de apoyo a la investigación en red
 
Proyecto%20 avance %20nutrición%20docx[1]
Proyecto%20 avance %20nutrición%20docx[1]Proyecto%20 avance %20nutrición%20docx[1]
Proyecto%20 avance %20nutrición%20docx[1]
 
Proyecto%20 avance %20nutrición%20docx[1]
Proyecto%20 avance %20nutrición%20docx[1]Proyecto%20 avance %20nutrición%20docx[1]
Proyecto%20 avance %20nutrición%20docx[1]
 
Trabajo investigación
Trabajo investigaciónTrabajo investigación
Trabajo investigación
 
Informe final
Informe finalInforme final
Informe final
 
texto cientifico.pdf
texto cientifico.pdftexto cientifico.pdf
texto cientifico.pdf
 
Articulo impacto ambiental por la producción de carnes y lácteos en Latinoame...
Articulo impacto ambiental por la producción de carnes y lácteos en Latinoame...Articulo impacto ambiental por la producción de carnes y lácteos en Latinoame...
Articulo impacto ambiental por la producción de carnes y lácteos en Latinoame...
 
Buiza ry
Buiza ryBuiza ry
Buiza ry
 
Alimentación y cáncer Prevención y tratamiento
Alimentación y cáncer Prevención y tratamientoAlimentación y cáncer Prevención y tratamiento
Alimentación y cáncer Prevención y tratamiento
 
salud publica bajo consumo de frutas y verduras
salud publica bajo consumo de frutas y verdurassalud publica bajo consumo de frutas y verduras
salud publica bajo consumo de frutas y verduras
 
Pacam cesfam chiguayante
Pacam cesfam chiguayantePacam cesfam chiguayante
Pacam cesfam chiguayante
 
A l i m e n t o sfun
A l i m e n t o sfunA l i m e n t o sfun
A l i m e n t o sfun
 
GUIA DE ALIMETACION
GUIA DE ALIMETACIONGUIA DE ALIMETACION
GUIA DE ALIMETACION
 

Último

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfaxelv9257
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...axelv9257
 
Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...solanocortezluisalfr
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxgustavovasquezv56
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 

Último (14)

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 

¿Como puede ayudar el Big Data al sector alimentario?

  • 1. TRABAJO FIN DE MÁSTER Máster Universitario en Arquitectura del Software Big Data: Aplicación y Utilidad en el Sistema Alimentario Autor/a: Juan Olivera Director: Juan Alfonso Lara Torralbo Curso 2015/2016
  • 2. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 2 -
  • 3. ÍNDICE RESUMEN ................................................................................................................................4 1. INTRODUCCIÓN .............................................................................................................6 1.1. Objetivos del trabajo ..........................................................................................8 1.2. Tecnologías empleadas.......................................................................................8 1.3. Beneficios esperados..........................................................................................9 1.4. Organización del resto del documento................................................................9 2. ESTADO DE LA CUESTIÓN ........................................................................................11 2.1. Nutrición.......................................................................................................... 11 2.2. Open Data ........................................................................................................ 12 2.3. Big Data........................................................................................................... 16 2.3.1. Apache Zeppelin...............................................................................................19 2.3.2. Apache Spark ....................................................................................................25 2.3.3. MongoDB..........................................................................................................35 2.4. Aplicaciones de Big Data en el campo de la nutrición...................................... 44 3. DESARROLLO...............................................................................................................46 3.1. Definición de variables e indicadores............................................................... 46 3.1.1. Promedio de sal consumida por país...............................................................46 3.1.2. Promedio de azúcar consumida por país. .......................................................47 3.1.3. Ranking de productos más grasos. ..................................................................47 3.1.4. Distribución de productos menos saludables .................................................48 3.2. Base de datos ................................................................................................... 49 3.2.1. Proceso de carga de datos ................................................................................50 3.2.2. Importación de datos en una instancia local...................................................51 3.2.3. Esquema de datos .............................................................................................52 3.2.4. Población y muestra .........................................................................................55 3.3. Creación de indicadores ................................................................................... 55 3.3.1. Carga de datos ...................................................................................................56 3.3.2. Transformación de datos ..................................................................................59 3.3.3. Visualización de datos......................................................................................64 4. RESULTADOS Y EVALUACION DE LA PROPUESTA............................................75 4.1. Resultados obtenidos........................................................................................ 75 4.2. Evaluación de la propuesta............................................................................... 78 5. CONCLUSIONES Y LÍNEAS FUTURAS.....................................................................85 6. REFERENCIAS BIBLIOGRÁFICAS Y RECURSOS ELECTRÓNICOS....................88 7. ANEXOS .........................................................................................................................92 7.1. Ejemplo de un producto en formato JSON ....................................................... 92 7.2. Información etiquetas de productos................................................................ 110 7.3. Distribución de productos Open Food Facts ................................................... 115 8. AGRADECIMIENTOS.................................................................................................117
  • 4. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 4 - RESUMEN El presente trabajo estudia la nutrición en el mundo a través del análisis de grandes volúmenes de datos, que son referidos a productos alimenticios consumidos en diferentes regiones del mundo, con el objetivo de conocer los hábitos alimentarios a escala mundial y así proporcionar información objetiva y resumida, que contribuya y ayude a los países y/o organismos a elaborar programas y políticas que permitan abordar problemas de malnutrición y mejorar la salud de las personas. El resultado del trabajo se conforma de un conjunto de indicadores alimentarios construidos a partir del análisis de más de ochenta mil etiquetas de productos alimenticios, provenientes de una Base de Datos Abierta y Colaborativa, haciendo uso de técnicas, conceptos y herramientas de Big Data, Open Data y Data Mining. Esta publicación, que servirá de introducción general a los problemas nutricionales de los países, pretende aportar una mirada más sobre la nutrición en el mundo así como educar y generar conciencia sobre nuestra alimentación y cómo influye en nuestra calidad de vida. Esta publicación será especialmente útil para los organismos y profesionales de la salud así también como el público en general. Palabras clave: Nutrición, Salud, Alimentos, Datos Masivos, Datos Abiertos, Datos Colaborativos, Dieta, Indicadores Nutricionales.
  • 5. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 5 - ABSTRACT The present work studies the role of nutrition in the world through the analysis of large volumes of data related to food products consumption in different parts of the world, with the aim of finding out the eating habits globally and thus provide objective, reliable and easy to understand information, that help countries and its governments to create programmed and policies that allow them to address the nutritional problems and improve health conditions. The result of this work shows a set of nutrition indicators obtained by analyzing over eighty thousand food labels from food products from an open database, using tools such as Big Data, Open Data y Data Mining. This publication will serve as an introduction to nutrition problems and intends to make a contribution on the topic, raising awareness of how diet has a direct influence in the quality of life of human beings. This work will be particularly useful for organisms and healthcare professionals, as well as the general public. Key words: Nutrition, Healthy, Food products, Big Data, Open Data, Collaborative Data, Diet, Nutritional Indicators.
  • 6. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 6 - 1. INTRODUCCIÓN Comer es imprescindible para vivir, pero muchas veces comemos por aburrimiento, para calmarnos, para celebrar, para juntarnos con amigos y/o familia, o simplemente por placer. En un tiempo en el que vivimos rodeados de estímulos que incitan a comer (programas de TV, publicidades, supermercados con góndolas rebosantes de alimentos, etc.) y en el que los alimentos son producidos a gran escala, procesados y manipulados para el consumo, es importante conocer como están constituidos los alimentos para así saber cómo contribuyen o repercuten sobre la salud y la calidad de vida de las personas. La nutrición es uno de los pilares de la salud y es uno de los instrumentos más válidos y efectivos que tenemos para proteger nuestra salud. Pese a que cada vez hay más información respecto a cómo alimentarse sanamente, el sobrepeso, la inclinación hacia la comida basura, los excesos y las enfermedades causadas por una mala nutrición están presentes en la vida de muchas personas. Una mala nutrición puede reducir la inmunidad, aumentar la vulnerabilidad a las enfermedades, alterar el desarrollo físico y mental, y reducir la productividad. “Se estima que un 30% del cáncer se produce por una mala alimentación” (Escribano) Hoy en día, los alimentos procesados se han convertido en base de la dieta de las personas, sustituyendo la comida natural. Un alimento procesado es todo aquel que se encuentra sometido a un tratamiento que busca brindarle determinadas características: potenciar su sabor, modificar su textura, agregar valor nutricional y aumentar su durabilidad. Muchos de estos alimentos contienen grandes cantidades de aditivos que no contribuyen beneficiosamente a nuestra salud. Una encuesta de la Universidad de Bristol revelo que los niños que llevaron una dieta rica en alimentos procesados en sus primeros años de vida tenían una disminución en su coeficiente a diferencia de los que tenía una alimentación alta en verduras y fibras. Otro estudio de la Universidad de Hawaii reveló que la gente que consumía más carne procesada tenía una probabilidad más alta un 67% de contraer cáncer de páncreas.
  • 7. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 7 - “Los alimentos procesados contribuyen hasta en un 75 % de sodio en la dieta.” (Katherine) Conocer como están constituidos los alimentos es importante para mejorar el estado nutricional de toda la población. Las etiquetas de los productos alimenticios aportan una valiosa información que van desde los ingredientes utilizados para su elaboración hasta el tipo de material utilizado para su envasado. Para poder descubrir y dar a conocer patrones alimentarios este trabajo se centra en el estudio de los siguientes datos:  Categoría del Producto o Alimento. Por ejemplo: Snack  Ingredientes que lo conforman. Por ejemplo: Aceite de Girasol  Origen de los ingredientes. Por ejemplo: Perú  Lugar donde el producto fue confeccionado o transformado. Por ejemplo: Perú  Aditivos. Por ejemplo: E330 – Ácido Cítrico  Información Nutricional: Por ejemplo: Proteínas o Colesterol que aporta.  Países donde el producto es comercializado. Por ejemplo: España  Lugar donde fue adquirido el producto. Por ejemplo: Meylan, Francia Datos de información general como ser: página web, código de barra e imagen del producto no son tenidos en cuenta en este trabajo. Los datos mencionados anteriormente forman parte de Open Food Facts, un proyecto colaborativo y abierto, en el que personas desde diferentes partes del mundo contribuyen aportando datos sobre los productos alimenticios. Cuenta con una base de datos Abierta, Colaborativa y Libre, que contiene información de las etiquetas de miles de productos provenientes de diferentes partes del mundo.
  • 8. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 8 - 1.1. Objetivos del trabajo El objetivo de este trabajo es aportar conocimiento a través de la exploración de dichos datos, haciendo uso de técnicas, herramientas y conceptos de Big Data y definiendo indicadores que permitan:  Conocer los hábitos alimentarios de las diferentes poblaciones.  Proporcionar conocimiento sobre dieta y salud.  Aportar datos para ayudar a las regiones y países a abordar los problemas de nutrición a través de políticas y medidas.  Reunir e intercambiar información sobre el estado nutricional de los países.  Contribuir con datos que ayuden a prevenir y abordar la malnutrición en el mundo.  Impulsar la creación de una industria de alimentos más abierta y transparente. 1.2. Tecnologías empleadas El resultado del trabajo es presentado haciendo uso del concepto de web notebook, un entorno interactivo web, en el que se representan los indicadores por medio de diferentes gráficas y a través del cual pueden explicarse o construirse nuevos indicadores, permitiendo almacenar o incluir los mismos en otros sitios web, como por ejemplo un blog de nutrición y salud. Las principales tecnologías utilizadas en este trabajo son:  Apache Zeppelin.  Apache Spark.  MongoDB.
  • 9. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 9 - 1.3. Beneficios esperados Este estudio resulta beneficioso para: 1. Población: los indicadores alcanzados por este trabajo pretenden mostrar e informar cómo nos alimentamos las personas de diferentes regiones del mundo con el objetivo de educar y generar conciencia sobre aquello que comemos y cómo influye sobre nuestra salud y calidad de vida. 2. Organismos de salud: la información proporcionada por este trabajo contribuye a la elaboración de políticas y medidas por parte de los organismos de salud, tanto regional como global, que permitan abordar problemas de malnutrición y enfermedades asociadas. Por ejemplo creación y/o modificación de leyes, controles y sanciones, etc. 3. Profesionales de la salud: nutricionistas y dietólogos pueden beneficiarse de este trabajo al contar con información que les permite conocer mejor los hábitos alimentarios de diferentes regiones, que productos están disponibles en cada región y como están conformados esos productos y así poder trabajar no solo con pacientes locales sino también con pacientes de cualquier parte del mundo. 1.4. Organización del resto del documento Los capítulos restantes de este documento se organizan en tres capítulos: En el Capítulo 2 se presenta el estado de la cuestión relacionado con el análisis de grandes volúmenes de datos aplicado al ámbito de la nutrición y la salud. Se presenta el contexto actual y las tecnologías relacionadas con este trabajo. También se introduce algunas soluciones BigData y OpenData implementadas bajo el mismo dominio de aplicación. Seguidamente, en el Capítulo 3 se presenta los detalles de la solución para la construcción de un sistema web interactivo que permita el análisis de datos nutricionales con el objetivo de
  • 10. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 10 - conocer y descubrir: tendencias, patrones y hábitos alimentarios. Por último, en el Capítulo 4 se concluye el trabajo, resumiendo los principales resultados. También se discute el trabajo a futuro.
  • 11. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 11 - 2. ESTADO DE LA CUESTIÓN 2.1. Nutrición Existen cuatro factores que están en el origen de la mayoría de las enfermedades y cuyos efectos combinados multiplican su nocividad:  La mala alimentación  La falta de ejercicio físico  El consumo de tóxicos (tabaco, drogas, alcohol, etc.)  El estrés. “Los factores de riesgo alimentarios representan el 11% de la pérdida de la salud, mientras que la mala alimentación se prevé que superará el tabaco como un importante factor de riesgo de mortalidad para el año 2016.” (Mhurchu, 2013). El profesor Cliona Ni Mhurchu, es el principal investigador del programa “Effective interventions and policies to improve population nutrition and health”, un programa construido usando técnicas de Big Data. Los problemas nutricionales causados por una dieta inadecuada pueden ser de muchos tipos. Una buena nutrición es la primera defensa contra las enfermedades y nuestra fuente de energía para vivir y estar activo. La nutrición comienza con lo que comemos: los productos del sector alimentario y agrícola. “El 85% de los alimentos que se consumen en la actualidad son procesados” (Hueda, 2016) Es sabido que la gran mayoría de ellos resulta poco saludable, debido a que tras los procesos de transformación que experimentan pierden nutrientes y propiedades naturales, e incorporan aditivos artificialmente creados para tal fin. Estos aditivos, no son bien digeridos por el organismo, ya que el cuerpo no está preparado para ellos y un consumo desmedido de estos puede causar enfermedades como diabetes, obesidad, problemas cardiacos e incluso diferentes tipos de cáncer.
  • 12. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 12 - "No todos los alimentos procesados son una mala elección. Algunos necesitan ser procesados para que sean seguros, como la leche, que debe ser pasteurizada para eliminar las bacterias dañinas. Otros alimentos lo necesitan para ser adecuados para el consumo, por ejemplo, prensar semillas para hacer aceite”. "Congelar frutas y verduras preserva la mayoría de las vitaminas, mientras que los productos en conserva favorecen el almacenamiento y la posibilidad de cocinarlos y comerlos durante todo el año, a menor costo que los frescos y con menos residuos". (Porter, 2015) Por defecto o por exceso, los problemas de nutrición incluyen siempre decisiones y prácticas inadecuadas. Ejemplo de ello, es no interpretar la información nutricional contenida en las etiquetas de los alimentos. “Solo el 1.2% de los consumidores comprende el uso e interpreta la información nutricional de los alimentos”. (Villalpando, 2012) La educación nutricional es un paso importante para enseñar a los consumidores a elegir alimentos saludables. Trabajando sobre nuestros sistemas alimentarios, sobre la forma en la que producimos, recolectamos, almacenamos, transportamos, transformamos y distribuimos alimentos, podemos mejorar nuestra dieta, nuestra salud y nuestro impacto sobre los recursos naturales. Los nuevos desafíos, como el cambio climático, la sostenibilidad ambiental y los rápidos cambios tecnológicos, están transformando el sistema alimentario. 2.2. Open Data Compartir información se está volviendo cada vez más fácil gracias al avance de las comunicaciones, pero también gracias a la mejora de los sistemas de almacenamiento y análisis, que permiten extraer datos útiles con mayor sencillez. “El Open Data permite que los datos puedan ser accedidos, usados y redistribuidos por cualquier persona.” (The Open Data Foundation, 2012) Compartir datos es importante porque los datos recopilados para una tarea específica pueden
  • 13. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 13 - tener valor para otras personas u organizaciones en diferentes contextos y / o por diferentes razones. “Cuanto mayor es el grado de apertura de los datos, mayor es el tamaño y la diversidad de la comunidad que accede a ellos. Así, y de acuerdo al efecto multiplicador de compartir en la red, el valor de un dataset se incrementará cuanto más fácil sea acceder a él y reutilizarlo.” (Gartner, 2014) “El Open Data contribuye a:  Transparencia y control democráctico  Participación  Autoempoderamiento  Mejoramiento o creación de nuevos productos y servicios  Innovación  Mejoramiento en la eficiencia y eficiencia de los servicios públicos  Medición del impacto de políticas  Nuevos conocimientos a partir de fuentes de datos combinadas y patrones en grandes volúmenes de datos” (opendatahandbook, 2014) Los datos abiertos pueden ser claves para el sistema alimentario global. “Durante la conferencia G8 llevada a cabo en Londres en Octubre del 2013, fue presentada la Global Open Data in Agriculture and Nutrition (GODAN).” (Jellema, Meijninger, & Addison, 2015) El objetivo de esta iniciativa es la construcción de políticas y el apoyo institucional para la apertura de datos relevantes para la agricultura y la alimentación en todo el sector público y
  • 14. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 14 - privado que permitan alcanzar seguridad alimentaria y nutricional a nivel mundial. “Los datos abiertos son cruciales para combatir la inseguridad alimentaria y construir un sistema agrícola sostenible” (Schmidhuber, 2014) Hoy en día, diversos organismos y países trabajan sobre programas que intentan mejorar la dieta y aumentar los niveles de nutrición a través de un enfoque centrado en las personas y los datos. En 2008, la Organización de las Naciones Unidas para la Alimentación y la Agricultura (FAO) lanzó CIARD (Coherence in Information for Agricultural Research for Development), un movimiento global dedicado a la apertura sin restricciones del conocimiento agrícola. El conocimiento agropecuario es un impulsor clave del crecimiento económico y resulta esencial para lograr la seguridad alimentaria. “El interés en garantizar la apertura de los datos agrícola y nutricional está ganando impulso y dos grandes iniciativas de trabajo como GODAN y CIARD están considerando la unión de sus esfuerzos” (Sabato, 2014) El Banco Mundial, continuando con su iniciativa de apertura de datos, lanzo en Octubre de 2012 HealthStats, un nuevo portal web con datos sobre salud, nutrición y población (HNP), a través del cual es posible poder explorar, visualizar, explotar y descargar sus datos. El sitio web incluye:  Visualización de datos animados que muestran las tendencias de las últimas décadas.  Nueva base de datos de población históricos y proyectados, y estimaciones.  Posibilidad de intercambio a través de redes sociales y correo electrónico. Más que dedicar esfuerzos a generar aplicaciones a partir de los datos, resulta sin duda más beneficioso ofrecerlos vía APIs (Application Programming Interface).
  • 15. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 15 - Por ejemplo, Spoonacular pone a disposición de desarrolladores de aplicaciones y empresas, una API que permite acceder a más de 330k recetas, 80k alimentos y 2000 ingredientes diferentes. Haciendo uso de ontología de alimentos construye relaciones semánticas entre ingredientes, recetas y alimentos. Cuenta con un buscador semántico que permite hacer uso del lenguaje natural para realizar consultas, como "pasteles sin gluten sin azúcar" o "magdalenas veganas bajas en grasa". También ofrece la posibilidad de calcular automáticamente la información nutricional para cualquier receta, analizar los costos de recetas, visualizar las listas de ingredientes, encontrar recetas a base de dietas especiales, requerimientos nutricionales, o ingredientes favoritos, clasificar recetas en tipos, o incluso calcular un plan de comidas completo. Gracias a ello, los desarrolladores y/o empresas pueden crear diferentes tipos de aplicaciones de alimentos y en especial de nutrición. Por otro lado, el departamento de agricultura de los Estados Unidos (USDA) expone sus datos a través de una API que permite interactuar con su base de datos de nutrientes y alimentos (NDB). Gracias a esta apertura, cualquier persona puede acceder y hacer uso de datos referidos a nutrición. Pero esto no siempre resulta así, ya que “Para hacer efectivo el acceso a los datos por parte de cualquier persona es necesario crear un marco común que:  Permita localizar de forma sencilla las fuentes de datos  Utilice un lenguaje estándar para la publicación de datos  Permita trabajar con datos de calidad de manera amigable a personas no expertas en áreas de programación o análisis de datos” (Torralba, 2014) Aunque la cantidad de datos de libre acceso, está en constante aumento, todavía hay desafíos relacionados con la gestión de datos, la concesión de licencias, la interoperabilidad y la explotación. En este sentido, es necesario desarrollar políticas y prácticas en torno a los datos abiertos. Pese a las barreras anteriormente mencionadas, una estrategia de apertura de datos madura y responsable permite cosechar grandes beneficios.
  • 16. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 16 - Los datos son esenciales para una buena toma decisiones y si bien, hoy en día contamos con menos restricciones de derechos de autor, patentes u otras mecanismos de control para acceder a diversas fuentes de datos, es importante que podamos extraer conocimiento de ellos. Contar con más datos no siempre es mejor. Para agregar valor es necesario extraer conocimiento de esos datos y traducir ese conocimiento en nuevos o mejores servicios. 2.3. Big Data El Big Data, es un concepto que hace referencia al almacenamiento de grandes cantidades de datos y a los procedimientos usados para encontrar patrones repetitivos dentro de ellos. Se caracteriza por el crecimiento constante del volumen de datos, la naturaleza variable de los mismos y la velocidad con la que necesitan ser procesados para ofrecer una rápida respuesta. “La explotación del Big Data, entendido como activos de información, demandan soluciones innovadoras y eficientes que ayuden a mejorar el conocimiento y la toma de decisiones.” (Laney, 2014) “El Cloud es un facilitador del Big Data y el Internet de las Cosas (IoT), un nuevo detonante.” (Bastión, 2014) Así mismo, la explosión de la generación de datos en las redes sociales, a través de las cuales los ciudadanos se convierten en productores activos de información y los dispositivos móviles que ofrecen automáticamente información de tiempo y posición, enriqueciendo así cualquier fuente de información, son otros de los principales orígenes de la ingente cantidad de información que se genera diariamente. Las dificultades más habituales vinculadas a la gestión de estas cantidades de datos se centran en la recolección y el almacenamiento, búsqueda, compartición, análisis, y visualización. Sin embargo, y en palabras de David Newman, “si bien el Big Data hace que las organizaciones sean más inteligentes, el open data es lo que conseguirá que realmente se obtengan más beneficios en el entorno altamente competitivo en el que nos encontramos.”
  • 17. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 17 - (Newman, 2014) Efectivamente, Big Data nos permite comprender qué hay en nuestros datos, mientras que Open Data permite publicar información para que esta sea transformada en conocimiento. La conjunción de ambas tecnologías permite la gestión del conocimiento. En este sentido, “IBM planea lanzar su primer centro de excelencia europeo Watson Health, que tendrá su sede en Milán, Italia, para respaldar la iniciativa del gobierno de Italia de establecer en este país un polo internacional de investigación avanzada en Genómica, Big Data, Envejecimiento y Nutrición, que permita desarrollar una nueva generación de aplicaciones y soluciones de salud basadas en datos” (IBM, 2016) IBM Watson es un sistema informático de inteligencia artificial que es capaz de responder a preguntas formuladas en lenguaje natural. Integra múltiples fuentes de datos (enciclopedias, diccionarios, tesauros, artículos de noticias, obras literarias, taxonomías, ontologías, etc.) para encontrar en ellas patrones desconocidos, conexiones ocultas, etc. Diseñado para permitir el procesamiento de lenguajes naturales, la recuperación de información, la representación del conocimiento, el razonamiento automático, y el aprendizaje automático, hace uso de estructuras de computación distribuida como Hadoop y cuenta ciento de técnicas diferentes para analizar el lenguaje natural, identificar fuentes, encontrar y generar hipótesis, buscar y puntuar evidencias, combinar y clasificar hipótesis. En el área de alimentación y nutrición, Chef Watson, una aplicación web desarrollada por IBM y la firma Bon Appétit que hace uso del motor ofrecido por Watson. Esta aplicación dirigida al ámbito culinario permite inventar recetas innovadoras a partir de los conocimientos aprendidos del análisis de las más de 10k recetas provenientes de la base de datos Bon Appétit, además de que permite conocer cómo se utilizan los ingredientes en diferentes platos y estilos de cocina. Esta información también se combina con información acerca de la composición de los alimentos y las preferencias o restricciones dietéticas (enfermedad celiaca, alergia o sensibilidad a los alimentos) por lo que les permite excluir ingredientes específicos, permitiendo a la gente para inspirar su imaginación culinaria sin
  • 18. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 18 - importar la dieta que siguen. Neutrino, es otra aplicación que se beneficia de las características de IBM Watson con el objetivo de mejorar la salud de las madres embarazadas y la salud de sus bebés. Neutrino ofrece consejos de nutrición personal en tiempo real incluyendo referencias científicas que son la base para las conclusiones del Neutrino. “Escribe la pregunta ¿Cuánto café puedo tomar cuando estoy embarazada? En un buscador Web tradicional, y obtendrás millones de páginas web con infinidad de respuestas y muchas de ellas contradictorias. Escribe o formula la misma pregunta en Neutrino y obtendrás una respuesta mucho más científica, útil y semántica” (Hamm, 2015) Queda en evidencia que nos encontramos ante un sistema experto, que hace uso de las bondades de IBM Watson, la plataforma tecnológica de computación cognitiva pionera que permite a los sistemas comprender el mundo de la manera que lo hacemos los humanos: a través de los sentidos, el aprendizaje y la experiencia, pero que a diferencia de estos, es capaz de poder analizar grandes volúmenes de información y obtener resultados en tiempo real. La arquitectura Big Data (generalizada de las soluciones de Business Inteligencie que existen hoy en día) está compuesta generalmente por cinco capas: recolección de datos, almacenamiento, procesamiento de datos, visualización y administración. El alcance de este trabajo comprende tres de las cinco capas: Capa de Arquitectura Tecnología empleada Visualización Apache Zeppelin Procesamiento y Análisis Apache Spark Almacenamiento MongoDB
  • 19. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 19 - 2.3.1. Apache Zeppelin 2.3.1.1. Generalidades Zeppelin es un proyecto basado en el concepto de web notebook, que permite a los científicos de datos realizar análisis interactivos y colaborativos posibilitando la obtención de datos de múltiples fuentes y la utilización de diferentes tecnologías y de lenguajes de programación, como ser: Shell, Spark, SparkSQL, Hive, Elasticsearch, R, etc. Ilustración 1 - Zeppelin integración
  • 20. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 20 - Un web notebook es una aplicación web que permite crear y compartir documentos que pueden contener código interactivo, fórmulas matemáticas, gráficos y visualizaciones, texto con formato, etc. Por su naturaleza web, permiten trabajar sobre un interfaz web en lugar de sobre una Shell. Ilustración 2 - Zeppelin web notebook Los notebooks en Zeppelin son multipropósito, por lo que sobre ellos es posible:  Obtener datos  Descubrir datos  Analizar datos  Visualizar datos  Compartir datos
  • 21. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 21 - Zeppelin ofrece varias ventajas:  Interfaz simple e intuitiva  Se integra con múltiples tecnologías y lenguajes.  Los notebooks pueden ser creados en varios lenguajes  Interfaz simple e intuitiva (construida sobre Bootstrap y AngularJS)  Se integra con herramientas de BigData como Hadoop y Spark  Permite visualizar los datos mediante diferentes tipos de graficas  Permite compartir los notebooks con diferentes colaboradores  Permite publicar los resultados para que puedan ser embebidos en websites, webapps,reportes, etc.  Tecnología 100% Open Source. Está construido sobre una arquitectura modular y basada en intérpretes, que permite la integración con múltiples lenguajes y tecnologías de backend, como por ejemplo:  Apache Hive QL  ApacheSpark (SQL, Scala and Python)  ApacheFlink  Postgres  Pivotal HAWQ
  • 22. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 22 -  Shell  Apache Tajo  AngularJS  Apache Cassandra  Apache ignite  Apache Phoenix  Apache Geode  Apache Kylin  Apache Lens Ofrece también la posibilidad de crear e implementar nuestros propios intérpretes. Ilustración 3 - Zeppelin arquitectura
  • 23. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 23 - 2.3.1.2. Descarga e instalación Apache Zeppelin actualmente se encuentra bajo Incubación, la fase de preparación de ASF (Apache Software Foundation) para los productos de código abierto Apache, por lo que la liberación de versiones es constante. Existen dos alternativas de instalación: 1. Descargar los binarios de https://zeppelin.incubator.apache.org/download.html 2. Construir los binarios a partir del código subido al repositorio Para este proyecto, se construirá los binarios a partir del último del código para asegurar tener los cambios más recientes. Primeramente, se deben instalar las dependencias necesarias para poder construir los binarios: sudo apt-get update sudo apt-get install git sudo apt-get install openjdk-7-jdk sudo apt-get install npm sudo apt-get install libfontconfig # install maven wget http://www.eu.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3- bin.tar.gz sudo tar -zxf apache-maven-3.3.3-bin.tar.gz -C /usr/local/ sudo ln -s /usr/local/apache-maven-3.3.3/bin/mvn /usr/local/bin/mvn Una vez preparados los requerimientos, es necesario clonar el repositorio para descargar los sources: git clone https://github.com/apache/incubator-zeppelin.git /usr/zeppelin Apache Zeppelin trabaja con varios intérpretes: Spark, Ignite, Scalding. Cada intérprete requiere de diferentes opciones de instalación. En este proyecto solo instalaremos el intérprete de Spark. mvn clean package -Pspark-1.4 -Dhadoop.version=2.4.0 -Phadoop-2.4 -DskipTests
  • 24. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 24 - 2.3.1.3. Configuración y uso básico Apache Zeppelin puede ser configurado a través de: 1. Variables de entorno (conf/zeppelin-env.sh) 2. Archivo de configuración (conf/zeppelin-site.xml) Los detalles de cada configuración pueden ser consultados en https://zeppelin.incubator.apache.org/docs/0.5.5-incubating/install/install.html Zeppelin puede ser iniciado y detenido a través de los siguientes comandos: bin/zeppelin-daemon.sh start bin/zeppelin-daemon.sh stop Ilustración 4 - Apache Zeppelin UI
  • 25. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 25 - 2.3.2. Apache Spark 2.3.2.1. Generalidades Apache Spark es un framework open source para procesamiento distribuido. Combina un sistema de computación distribuida a través de clúster de ordenadores con una manera sencilla de escribir programas. Puede trabajar en modo Standalone o modo clúster sobre Apache Mesos o Hadoop YARN. Ilustración 5 - Integración Spark – Hadoop a través de YARN Spark está diseñado para ejecutarse por defecto en memoria, lo que permite escribir algoritmos iterativos sin escribir en disco un conjunto de resultados después de cada iteración como lo haría MapReduce. MapReduce, revolucionó la manera de trabajar con grandes conjuntos de datos ofreciendo un modelo relativamente simple para escribir programas que pueden ejecutar paralelamente en cientos y miles de máquinas al mismo tiempo. Gracias a su arquitectura, MapReduce logra prácticamente una relación lineal de escalabilidad, ya que si los datos crecen es posible añadir más máquinas y tardar lo mismo. Spark mantiene la escalabilidad lineal y la tolerancia a fallos de MapReduce, pero amplía sus bondades gracias a varias funcionalidades:  DAG (Directed Acyclic Graph): un grafo dirigido que no tiene ciclos.
  • 26. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 26 -  RDD (Resilient Distributed Dataset): Un conjunto de datos inmutables, distribuidos y flexibles. Se caracteriza por:  Ser una plataforma de código abierto con una comunidad muy activa (el volumen de líneas de código y el número de contribuyentes crece año a año)  Ser una plataforma rápida (gracias al procesamiento de datos en memoria)  Ser una plataforma unificada para gestionar datos (Una única plataforma para soportar procesamiento en lotes, procesamiento en tiempo real, algoritmos de Machine Learning, y procesamiento gráfico).  Disponer de una consola interactiva (Es posible analizar los datos de forma interactiva, con la conexión a los clústeres.)  Proporcionar un conjunto de APIs para trabajar con datos (Es posibles desarrollar aplicaciones en Scala, Java, Python que aprovechen las características de procesamiento distribuido ofrecido por Spark) Spark está una conformada por diferentes plataformas, es por ello que es considerada una tecnología hibrida. Ilustración 6 - El ecosistema de proyectos en Spark. Fuente: Databricks
  • 27. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 27 -  Spark SQL: permite la consulta de datos estructurados utilizando lenguaje SQL o una API, que se puede usar con Java, Scala, Python o R.  Spark Streaming: permite gestionar grandes datos en tiempo real. Esto facilita que los datos se analicen según van entrando, sin tiempo de latencia y a través de un proceso de gestión en continuo movimiento.  MLlib (Machine Learning): contiene algoritmos que dotan a Apache Spark de muchas utilidades, como la regresión logística y máquinas de vectores de soporte (SVM); modelos de árbol de regresión bayesiana; técnicas de mínimos cuadrados; modelos de mezclas gausianas; análisis de conglomerados de K medias; asignación latente de Dirichlet (LDA); descomposición en valores singulares (SVD); análisis de componentes principales (ACP); regresión lineal; regresión isotónica; etc.  GraphX: un framework de procesamiento gráfico. Proporciona una API para la elaboración de grafos con los datos. El gran rendimiento ofrecido Spark se debe en gran parte a su Arquitectura. Ilustración 7 - Spark arquitectura
  • 28. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 28 - Las aplicaciones para Spark se ejecutan como un grupo independiente de procesos en clústeres, coordinados por el SparkContext. El SparkContext representa el contexto básico de Spark, y a partir de él se crean el resto de variables que maneja el framework. El SparkContext puede conectarse a gestores de clúster que son los encargados de asignar recursos en el sistema. Una vez conectados, Spark puede encargar que se creen ejecutores (executors) encargados de la computación en los nodos del clúster. Los trozos de código propio de los que se encargan estos ejecutores son denominados tasks o tareas. Mediante el cache se almacenan los datos en memoria para que no sea necesario acceder a ellos en disco.El almacenamiento de los datos en memoria caché hace que los algoritmos de machine learning ejecutados que realizan varias iteraciones sobre el conjunto de datos de entrenamiento sea más eficiente. Además, se pueden almacenar versiones transformadas de dichos datos. Spark ofrece la flexibilidad suficiente para escoger qué datos quedan en memoria y cuáles pueden volcarse al disco duro porque no son necesarios en ese momento. Eso libera mucho el procesamiento, aumentando su eficacia. Ventajas  Rapidez: Spark es capaz de ejecutar los trabajos por lotes de procesamiento de entre 10 a 100 veces más rápido que el motor MapReduce, principalmente mediante la reducción del número de escrituras y lecturas de disco.  Procesamiento Real-Time: En lugar de simplemente procesar un lote de datos almacenados, como es el caso de MapReduce, Spark también puede manipular los datos en tiempo real utilizando Spark Streaming. Esta capacidad permite que las aplicaciones pasen datos a través de una función de software – por ejemplo, para llevar a cabo análisis al mismo tiempo que los datos son recogidos.
  • 29. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 29 -  Alta tolerancia a fallos: En lugar de la persistencia o la existencia de checkpoints en resultados intermedios, Spark recuerda la secuencia de operaciones que llevó a un determinado conjunto de datos. Así que cuando falla un nodo, Spark reconstruye el conjunto de datos basado en la información almacenada. Esto proporciona una cierta estabilidad que permite que no se caiga todo un proceso cuando aparecen fallos en alguno de los nodos.  Facilidad de uso: La implementación tanto de procesamiento batch como realtime sobre la capa de Spark elimina gran parte de la complejidad de MapReduce, y simplifica el despliegue, mantenimiento y desarrollo de aplicaciones.  Conectividad, multiplataforma: Un conjunto de APIs para el motor de ejecución de Spark están disponibles en Java, Python y Scala, lo que permite a los desarrolladores escribir aplicaciones que se pueden ejecutar sobre la capa de Spark en estos lenguajes. Spark puede interactuar con los datos en el HDFS (Sistema de archivos de Hadoop), la base de datos HBase Hadoop, el almacén de datos Cassandra y varias otras capas de almacenamiento. Con Spark, un programa típico se organiza de la siguiente manera: 1. A partir de una variable de entorno llamada context se crea un objeto RDD (Resilient Distributed Dataset) leyendo datos de fichero, bases de datos o cualquier otra fuente de información. 2. Una vez creado el RDD inicial se realizan transformaciones para crear más objetos RDD a partir del primero. Dichas transformaciones se expresan en términos de programación funcional y no eliminan el RDD original, sino que crean uno nuevo. 3. Tras realizar las acciones y transformaciones necesarias sobre los datos, los objetos RDD deben converger para crear el RDD final. Este RDD puede ser almacenado
  • 30. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 30 - Cuando el programa comienza su ejecución crea un grafo similar al de la figura siguiente en el que los nodos son objetos RDD y las uniones entre ellos son operaciones de transformación. En la figura, las líneas rojas representan transformación y las verdes operación. Ilustración 8 - Tarea Spark grafo de ejecución
  • 31. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 31 - El grafo de la ejecución es un DAG (Grafo Acíclico Dirigido) y, cada grafo es una unidad atómica de ejecución. Un DAG no tiene ciclos, es decir, para cada nodo del grafo no hay un camino directo que comience y finalice en dicho nodo. Un vértice se conecta a otro, pero nunca a sí mismo. Ilustración 9 - DAG (Directed Acyclic Graph) En comparación con MapReduce, el cual crea un DAG con dos estados predefinidos (Map y Reduce), los grafos DAG creados por Spark pueden tener cualquier número de etapas. Spark con DAG es más rápido que MapReduce por el hecho de que no tiene que escribir en disco los resultados obtenidos en las etapas intermedias del grafo. MapReduce, sin embargo, debe escribir en disco los resultados entre las etapas Map y Reduce.
  • 32. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 32 - Un RDD (Resilient Distributed Dataset) permite a los programadores realizar operaciones sobre grandes cantidades de datos en clusters de una manera rápida y tolerante a fallos. Una vez que los datos han sido leídos como objetos RDD en Spark, pueden realizarse diversas operaciones mediante sus APIs. Los dos tipos de operaciones que se pueden realizar son:  Transformaciones: tras aplicar una transformación, obtenemos un nuevo y modificado RDD basado en el original.  Acciones: una acción consiste simplemente en aplicar una operación sobre un RDD y obtener un valor como resultado, que dependerá del tipo de operación. Dado que las tareas de Spark pueden necesitar realizar diversas acciones o transformaciones sobre un conjunto de datos en particular, es altamente recomendable y beneficioso en cuanto a eficiencia el almacenar RDDs en memoria para un rápido acceso a los mismos. Spark define dos tipos de operaciones de transformación:  Narrow transformation: se utiliza cuando los datos que se necesitan tratar están en la misma partición del RDD y no es necesario realizar una mezcla de dichos datos para obtenerlos todos. Algunos ejemplos son las funciones filter(), sample(), map() o flatMap().  Wide transformation: se utiliza cuando la lógica de la aplicación necesita datos que se encuentran en diferentes particiones de un RDD y es necesario mezclar dichas particiones para agrupar los datos necesarios en un RDD determinado. Ejemplos de wide transformation son: groupByKey() o reduceByKey().
  • 33. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 33 - Ilustración 10 - Spark tipos de transformaciones 2.3.2.2. Descarga e instalación Spark está construido sobre la Máquina Virtual de Java (JVM), por lo que el único pre- requisito es tener instalado Java 6 o superior. $ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update $ sudo apt-get install oracle-jdk7-installer A continuación instalamos las herramientas para trabajar con Scala, SBT: $ sudo apt-get install sbt Apache Spark puede descargarse desde http://spark.apache.org/downloads.html. Una vez descargada la versión, procedemos a compilar y ensamblar usando SBT: $ tar -xvf spark-1.0.1.tgz $ cd spark-1.0.1 $ sbt/sbt clean compile $ sbt/sbt assembly
  • 34. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 34 - Spark viene con una consola interactiva: o bin/pyspark (interprete interactivo de Python con Spark) o bin/spark-shell (interprete interactivo de Scala con Spark) $ ./bin/spark-shell Ilustración 11 - Consola interactiva spark-shell 2.3.2.3. Configuración y uso básico Spark ofrece tres alternativas de configuración: o Spark properties: controlan la mayoría de los parámetros de aplicación y se pueden configurar mediante el uso de un objeto SparkConf, o a través de propiedades de sistema Java.
  • 35. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 35 - o Environment variables: establecen la configuración (por nodo) a través del script conf/spark-env.sh o La configuración referente al logging puede ser manipulada a través del archivo log4j.properties. En el sitio oficial de Apache Spark puede encontrarse mayor detalle referido a la configuración (http://spark.apache.org/docs/latest/configuration.html). A continuación, se presenta un ejemplo básico de uso: scala> val textFile = sc.textFile("README.md") textFile: spark.RDD[String] = spark.MappedRDD@2ee9b6e3 scala> textFile.count() // Number of items in this RDD res0: Long = 126 scala> textFile.first() // First item in this RDD res1: String = # Apache Spark scala> textFile.filter(line => line.contains("Spark")).count() // How many lines contain "Spark"? res3: Long = 15 2.3.3. MongoDB 2.3.3.1. Generalidades MongoDB es una base de datos NoSQLde código abierto orientada a documentos. Esto quiere decir que en lugar de guardar los datos en registros como en el modelo relacional, guarda los datos en documentos. Estos documentos son almacenados en BSON, que es una representación binaria de JSON (JavaScript Object Notation) y permiten que la integración de los datos en ciertas aplicaciones sea más fácil y rápida
  • 36. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 36 - Su núcleo está basado en el lenguaje Javascript, por lo que se puede usar operaciones escritas en este lenguaje (por lo general objetos JSON) para hacer consultas en lugar de SQL. Se modelo se basa en el principio de almacenar los datos en una estructura tipo clave-valor. Los valores de estas claves son estructuras tipo JSON (llamados documentos), mientras que las claves son llamados colecciones. Las colecciones en MongoDB son algo parecido a las tablas en un modelo de base de datos relacional. Son un grupo de documentos relacionados. La estructura de almacenamiento es tan flexible que los documentos de una misma colección pueden tener esquemas o estructuras diferentes, inclusive documentos con campos en común no tienen necesariamente que tener el mismo tipo de dato. Ilustración 12 - MongoDB colecciones y documentos Entre sus principales características podemos nombrar:  Consultas Ad hoc MongoDB soporta la búsqueda por campos, consultas de rangos y expresiones regulares. Las consultas pueden devolver un campo específico del documento pero también puede ser una función JavaScript definida por el usuario.
  • 37. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 37 -  Indexación Cualquier campo en un documento de MongoDB puede ser indexado, al igual que es posible hacer índices secundarios. El concepto de índices en MongoDB es similar a los encontrados en base de datos relacionales.  Replicación MongoDB soporta el tipo de replicación primario-secundario. Cada grupo de primario y sus secundarios se denomina replica set. El primario puede ejecutar comandos de lectura y escritura. Los secundarios replican los datos del primario y sólo se pueden usar para lectura o para copia de seguridad, pero no se pueden realizar escrituras. Los secundarios tienen la habilidad de poder elegir un nuevo primario en caso de que el primario actual deje de responder.  Balanceo de carga MongoDB se puede escalar de forma horizontal usando el concepto de shard. El desarrollador elige una clave de sharding, la cual determina cómo serán distribuidos los datos de una colección. Los datos son divididos en rangos (basado en la clave de sharding) y distribuidos a través de múltiples shard. Cada shard puede ser una réplica set. MongoDB tiene la capacidad de ejecutarse en múltiple servidores, balanceando la carga y/o replicando los datos para poder mantener el sistema funcionando en caso que exista un fallo de hardware. La configuración automática es fácil de implementar bajo MongoDB y se pueden agregar nuevas servidores a MongoDB con el sistema de base de datos funcionando.  Almacenamiento de archivos MongoDB puede ser utilizado como un sistema de archivos, tomando la ventaja de la capacidad que tiene MongoDB para el balanceo de carga y la replicación de datos utilizando múltiples servidores para el almacenamiento de archivos. Esta función se llama GridFS y es más bien una implementación en los drivers, no en el servidor, por lo que está incluido en los drivers oficiales de que MongoDB desarrolla. Estos drivers exponen funciones y métodos para la manipulación de archivos y contenido a los desarrolladores. En un sistema con
  • 38. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 38 - múltiple servidores, los archivos pueden ser distribuidos y replicados entre los mismos y de una forma transparente, de esta forma se crea un sistema eficiente que maneja fallos y balanceo de carga.  Agregación MongoDB proporciona un framework de agregación que permite realizar operaciones similares a las que se obtienen con el comando SQL "GROUP BY". El framework de agregación está construido como un pipeline en el que los datos van pasando a través de diferentes etapas en los que son modificados, agregados, filtrados y formateados hasta obtener el resultado deseado. Todo este procesado utiliza los índices existentes y se produce en memoria. Asimismo, MongoDB proporciona una función MapReduce puede ser utilizada para el procesamiento por lotes de datos y operaciones de agregación.  Ejecución de JavaScript del lado del servidor MongoDB tiene la capacidad de realizar consultas utilizando JavaScript, haciendo que estas sean enviadas directamente a la base de datos para ser ejecutadas. Gran parte de la escalabilidad, rendimiento y alta disponibilidad ofrecida por MongoDB se debe gracias a sus estrategias ofrecidas para Replicación, Fragmentación y Agregación.  Replicación MongoDB ofrece alta disponibilidad de datos gracias al uso de replicación. La replicación permite que los datos estén disponibles en más de un servidor a la vez, para que en el caso de que uno falle por cualquier motivo, los datos se puedan leer o escribir usando otro servidor. Al grupo de instancias que poseen la misma información se les denomina replica set o grupo de replicación. Un replica set en MongoDB está compuesto por 2 tipos principales de miembros, instancias primarias y secundarias, teniendo una única instancia primaria la cual aceptará todas las operaciones de escritura provenientes de los sistemas cliente. Las
  • 39. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 39 - operaciones de lectura son dirigidas por defecto a la instancia primaria; sin embargo es posible configurar la lectura a instancias secundarias. Ilustración 13 - Instancia Primaria Replica Set MongoDB Estas operaciones que alteran los datos son escritas en un archivo llamado oplog o bitácora de operaciones, los miembros secundarios replican este archivo del miembro primario y ejecutan las mismas operaciones sobre su conjunto de datos, esto permite tener la misma información en las diferentes instancias. Ilustración 14 - Instancias Secundarias Replica Set MongoDB
  • 40. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 40 - Debido a que el procedimiento de replicación se realiza de manera asíncrona, es posible que clientes que consulten directamente a miembros secundarios no obtengan la información más reciente. La arquitectura de los replica set dicta que los miembros deben enviar latidos o pings entre ellos cada 2 segundos, si en un período de 10 segundos el latido no es devuelto, se marca al miembro en cuestión como inaccesible. Cuando no existe un miembro primario, este deja de responder o este es obligado a darse de baja, es necesaria la elección de un nuevo miembro primario. Dicha elección se basa inicial y principalmente en la comparación de prioridades de aquellos miembros elegibles (esta prioridad es por defecto 1, esto para darles a todos los miembros la posibilidad de ser elegidos). Otro aspecto a considerar es la capacidad que tiene el candidato para conectarse con la mayoría de los miembros en el grupo.  Fragmentación (Sharding) La fragmentación de datos permite separar los datos en diferentes instancias o fragmentos. En MongoDB la unidad de base de datos que se fragmenta son las colecciones. Por lo tanto una colección que sea declarada como fragmentada podría poseer distintos documentos en los fragmentos del cluster. Esta estrategia, permite escalar la base de datos horizontalmente. Ilustración 15 - Arquitectura cluster fragmentación
  • 41. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 41 - o Aplicación y Driver Las aplicaciones cuando necesitan comunicarse con la base de datos de MongoDB lo hacen a traves de un driver, estos tienen implementados los métodos y protocolos necesarios para comunicarse correctamente con la base de datos encapsulando la complejidad del proceso al desarrollador. o Fragmento Un fragmento o shard es aquel que posee los datos fragmentados de las colecciones que componen la base de datos como tal, este suele estar compuesto por un replica set preferiblemente; sin embargo en ambientes de desarrollo podría ser una única instancia por fragmento. o Router Debido a que las aplicaciones ven la base de datos como un todo, el router es el encargado de recibir las peticiones y dirigir las operaciones necesarias al fragmento o fragmentos correspondiente(s). o Servidores de configuración Este tipo de instancias se encargan de almacenar la metadata del cluster de fragmentación, es decir, qué rangos definen un trozo de una colección y qué trozos se encuentran en qué fragmento. Esta información es almacenada en caché por el router para lograr un óptimo tiempo de procesamiento.  Aggregation El proceso de agregación define una serie de operaciones (pipeline) a las cuales se somete una colección para obtener un conjunto de resultados calculados, formateados y/o filtrados de manera diferente a como se encuentran en los documentos, con el objetivo de agrupar y/o calcular datos que residen en los documentos de acuerdo a una necesidad particular.
  • 42. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 42 - Asimismo, MongoDB proporciona una función MapReduce que puede ser utilizada para el procesamiento por lotes de datos (batch-processing) y operaciones de agregación. Ilustración 16 –MongoDB aggregate Ilustración 17 - MongoDB MapReduce
  • 43. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 43 - 2.3.3.2. Descarga e instalación MongoDB se encuentra disponible para plataformas: Mac OS X, Linux y Windows. A continuación describiremos la instalación, configuración y uso básico de MongoDB sobre una plataforma Linux basado en Debian similar a la propuesta por este trabajo. Primero debemos importar la llave pública GPG y crear el archivo de fuentes: $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 ... $ echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list ... A continuación se deben actualizar los repositorios y proceder a la instalación: $ sudo apt-get update ... $ sudo apt-get install mongodb-10gen ... 2.3.3.3. Configuración y uso básico MongoDB ofrece ofrecen varias opciones para el uso de SSL, configuración de replicación, clusterización, etc. que pueden ser explicitadas a través de un archivo de configuración: /etc/mongodb.conf Para gestionar el servicio de MongoDB basta con ejecutar: $ sudo /etc/init.d/mongodb [ start | stop | restart ]
  • 44. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 44 - 2.4. Aplicaciones de Big Data en el campo de la nutrición. “Existen varias maneras en las cuales el Big Data puede ser aprovechado en la investigación nutricional:  Exploración de información de alimentos en venta  Seguimiento del comportamiento alimentario a través de aplicaciones para Smartphone.  Data linkages  Análisis de datos publicitarios de los fabricantes de alimentos sobre redes sociales” (Mhurchu, Big Food, Obesity & Poor Diets: Big Data Solutions, 2013) A continuación, se presentan algunos casos de estudio que han sido formulados y diseñados haciendo uso de Big Data:  NutriTrack: Un programa que comenzó en 2013 y que crece año a año. Consta del desarrollo y actualización de datos sobre los alimentos procesados que se encuentran a la venta en Nueva Zelanda, incluida la composición nutricional, el tamaño del envase, el tamaño de la porción, el etiquetado y los ingredientes. Los datos son recogidos a través de una aplicación para Smartphone. Este estudio permitió a los investigadores comparar el contenido de sal en los productos entre seis países y del cual se ha encontrado que el contenido de sal en los productos de Nueva Zelanda son más altos que en el Reino Unido y Francia.  FoodSwitch: Una aplicación para Smartphone que permite a los usuarios escanear los códigos de barras de productos y obtener indicadores acerca del contenido de sal, grasa y azúcar de los alimentos envasados. La aplicación ofrece opciones de productos más saludables y permite que los usuarios puedan compartir información a través de redes sociales. La aplicación se alimenta de múltiples fuentes ya que permite que los usuarios sean quienes ingresen los productos al sistema desde su Smartphone.
  • 45. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 45 -  NutriSales: Un programa que alcanza a Nueva Zelanda y que comenzó en 2013 y tiene planificado terminar en 2018. Compone varias fuentes de datos con el objetivo de conocer la exposición de la población (tanto a nivel local como regional) al sodio, grasas saturadas y azúcar presente en los alimentos procesados. Se basa en Nutritrack, una fuente de datos local que permite conocer los nutrientes de los alimentos, una fuente de nutrientes global y una base de datos local de venta de productos alimenticios.  KidsCam: Este ensayo comenzó en 2014. El objetivo es medir la frecuencia y la duración de la exposición de los niños en la publicidad de alimentos. La recolección de datos finalizo en Julio de 2015 y en estos momentos la información ya se encuentra lista para comenzar a ser analizada. Se analizarán cuatro millones de imágenes publicitarias, con el objetivo de conocer en qué proporción la comida basura (junk food), el alcohol y el tabaco contamina el entorno de los niños. Estamos en las primeras etapas de una revolución mundial de nutrición. Las personas son cada vez más conscientes de la relación entre la nutrición y la salud, y, gracias a Internet y a la evolución tanto de las tecnologías, así como de nuevas prácticas como el Open y Big Data, es posible disponer y colaborar con variadas fuentes de información que pueden ser utilizadas para ayudar a vivir más saludablemente. Explotar esta información con el objetivo de presentar indicadores que muestren el impacto de los alimentos ultra-procesados en la salud y que permitan impulsar la reformulación de los mismos con la idea de mejorar la salud de la población es el primer paso.
  • 46. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 46 - 3. DESARROLLO No hay duda de que la industria alimentaria es una actividad que se ha globalizado. Hoy día podemos encontrar una gran variedad de alimentos en los centros de alimentación, no sólo por la gran cantidad de marcas, envases, tamaños, formas, sino en lo que se refiere a su procedencia. Hoy en día, el consumidor encuentra fácilmente productos como frutas, verduras, salsas, especias, refrescos, diversos tipos de snacks, derivados de lácteos, cereales, u otros alimentos no tradicionales. Estudiar la composición de estos productos distribuidos globalmente nos permite conocer los patrones y hábitos alimentarios en cada región, así también como identificar tendencias alimentarias. Este trabajo se centra en el estudio de las descripciones de los productos encontradas en las etiquetas de los mismos, con el objetivo de generar conocimiento, el cual es representado por medio de un conjunto de indicadores alimentarios. Los indicadores se diseñaron teniendo en cuenta una nota descriptiva publicada en Mayo de 2015 por la Organización Mundial de la Salud (OMS, 2015). En ella, la OMS nos ofrece un compendio, que incluye consejos prácticos, de todos aquellos criterios que considera necesarios y fundamentales para que nuestra alimentación cumpla el propósito de nutrirnos y asegurarnos una vida con calidad. 3.1. Definición de variables e indicadores 3.1.1. Promedio de sal consumida por país Indica que cantidad de gramos de sal que son consumidos en promedio cada 100 gramos de alimento en cada país. Su valor esta expresado en gramos. Se calcula en base a los campos sodium_100g y countries_en de la etiqueta de cada producto.
  • 47. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 47 - El campo sodium_100g expresa que proporción de sal (expresada en gramos) cada 100 gramos está presente en el producto. Por ejemplo, un valor de 1.11 en el campo sodium_100g indica que cada 100 gramos de alimento 1.11 gramos de sal son aportados a la alimentación. El campo countries_en contiene la lista de países en los cuales un producto está expuesto al consumo. Los países están expresados en idioma ingles y separados por coma. 3.1.2. Promedio de azúcar consumida por país. Indica que cantidad de gramos de azúcar que son consumidos en promedio cada 100 gramos de alimento en cada país. Su valor esta expresado en gramos. Se calcula en base a los campos sugar_100g y countries_en de la etiqueta de cada producto. El campo sugar_100g expresa que proporción de azúcar (expresada en gramos) cada 100 gramos está presente en el producto. Por ejemplo, un valor de 10.4 en el campo sugar_100g indica que cada 100 gramos de alimento 10.4 gramos de azúcar son aportados a la alimentación. El campo countries_en contiene la lista de países en los cuales un producto está expuesto al consumo. Los países están expresados en idioma ingles y separados por coma. 3.1.3. Ranking de productos más grasos. Indica que cantidad de gramos de grasas transgénicas que en promedio aporta cada categoría de producto en 100 gramos de alimento. Su valor esta expresado en gramos y las categorías son clasificados dentro de un ranking. Se calcula en base a los campos trans-fat_100g y main_category_en de la etiqueta de cada producto.
  • 48. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 48 - El campo trans-fat_100g expresa que proporción de grasas transgénicas (expresada en gramos) cada 100 gramos está presente en el producto. Por ejemplo, un valor de 7.6 en el campo trans-fat_100g indica que cada 100 gramos de alimento 7.6 gramos de grasas transgénicas son aportados a la alimentación. El campo main_category_en indica la categoría a la que pertenece un producto y esta expresada en idioma inglés. 3.1.4. Distribución de productos menos saludables Refleja cómo se distribuyen los productos en cada región en base a su puntuación nutricional y en base al porcentaje que representan del total de la población de productos en esa región. Se calcula en base a los campos countries_en y nutrition-score-uk_100g de la etiqueta de cada producto. El campo countries_en contiene la lista de países en los cuales un producto está expuesto al consumo. Los países están expresados en idioma ingles y separados por coma. El campo nutrition-score-uk_100g representa el puntaje nutricional definido por la Agencia de Normas Alimentarias del Reino Unido (Food Safety Agency, FSA) para ese producto. En Marzo de 2006, la FSA presentó un diseño de etiquetado frontal que combina información nutricional con un código de colores (semáforo nutricional). El modelo del semáforo nutricional fue propuesto para permitir a los consumidores evaluar de manera simple y rápida los niveles de los nutrientes en un producto y conocer cuáles de ellos tiene una composición nutricional más acorde con las recomendaciones de la Agencia de Normas Alimentarias de Reino Unido. (Bordonada, 2013) El modelo utiliza seis nutrientes y la cantidad de fruta o vegetales contenida en 100 gramos de un alimento para diferenciar entre los alimentos más y menos saludables. Esto genera una puntuación única en la que los factores negativos (calorías, grasas saturadas,
  • 49. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 49 - azúcar y sodio) se compensan con los puntos de factores positivos (proteínas, fibra y fruta mínimamente procesada o vegetales). Cada factor negativo contribuye de 0 a 10 puntos, y cada factor positivo contribuye de 0 a 5 puntos. El total de puntos positivos son restan del total de puntos negativos para generar una puntuación (score) que, oscila entre -15 puntos para los alimentos más saludables y +40 puntos para los alimentos menos saludables. Ilustración 18 – Modelo de puntuación nutricional definido por la FSA (Food Safety Agency) 3.2. Base de datos La piedra angular sobre la que sustenta este trabajo es Open Food Facts, una base de datos abierta y colaborativa que alberga información referida a productos alimenticios distribuidos en todo el mundo. Estos datos están disponibles bajo licencia ODbL (Open Database License). La información en la base de datos constantemente es actualizada gracias a los aportes de una comunidad global de usuarios y es por ello que la base de datos se encuentra implementada sobre una base de datos NoSQL como MongoDB. Esta base de datos, de tipo documental le confiere el rendimiento y escalabilidad que necesita para poder soportar la demanda creciente
  • 50. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 50 - de los datos. También su esquema de datos flexible permite que los datos no tengan el mismo conjunto de campos o estructura, lo que le confiere mayor agilidad y adaptabilidad a los cambios. Open Food Facts, también es colaborativa, por lo que cualquier persona con una cuenta de usuario puede revisar, completar, corregir y agregar nuevos datos. Existe un control de versiones, que permite que todos los cambios realizados sobre los datos de la base de datos sean registrados. 3.2.1. Proceso de carga de datos Los productos pueden ser incorporados a la base de datos por cualquier usuario a través de alguna de estas dos opciones:  Aplicación Mobile  Aplicación Web La aplicación Mobile permite a los usuarios escanear el código de barras de un producto, para consultar la información del mismo, así también como tomar y enviar imágenes y datos de los productos que se deseen incorporar a la base de datos. Se encuentra desarrollada en HTML y Javascript y hace uso de Phonegap (Apache Córdoba) para portar la aplicación a diferentes plataformas móviles. Así mismo puede ser descargada desde las tiendas de aplicaciones (App. Store, Google Play, Windows Phone Store). La aplicación Web, se encuentra desplegada en Internet. Permite buscar productos a través de diferentes criterios de búsqueda y cargar la información de nuevos productos. Los resultados de las consultas pueden ser visualizados a través de algunos indicadores built-in.
  • 51. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 51 - Ilustración 19 - OpenFoodFacts Mobile App. Ilustración 20 - OpenFoodFacts Web App. 3.2.2. Importación de datos en una instancia local. La información de la base de datos constantemente es actualizada por múltiples usuarios y Open Food Facts publica sus datasets diariamente en 3 formatos diferentes:  Database dumps.  CSV exports.  RDF exports. Para este trabajo, se creó una instancia local de la base de datos y se llevó a cabo la importación de los datos contenidos en el database dump generado el 13 de Enero de 2016.
  • 52. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 52 - # Start Database mongod.exe --dbpath C:DesarrolloMongoDBmongodb-win32-i386-3.0.4data # Restore Database from /openfoodfacts-mongodbdump/dump ## products.bson ## products.metadata.json mongorestore -h 127.0.0.1 -d openfoodfacts La base de datos creada localmente cuenta con una única colección donde reside la información de los productos importados de Open Food Facts. Ilustración 21 - Base de datos montada en una instancia local de MongoDB 3.2.3. Esquema de datos Aunque MongoDB es schemaless (sin esquema), cada producto puede ser descripto por medio de 159 campos (Ver Anexos) y se identifica unívocamente por su código de barra. Los productos son representados en la base de datos por medio de documentos JSON
  • 53. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 53 - (JavaScript Object Notation), pudiendo variar estos en lo que respecta a estructura. { ... "generic_name" : "Mini tabletas de chocolate negro con un 70% de cacao mínimo. Nota: El mismo código de barras coincide con otros chocolates similares", ... "nutrition_score_warning_no_fiber" : NumberLong(1), "manufacturing_places" : "Berlín,Alemania", "nutriments" : { "sodium" : "0.0196850393700787", "sugars" : "27.9", "sugars_value" : "27.9", "carbohydrates_unit" : "g", "fat_unit" : "g", "proteins_unit" : "g", "nutrition-score-fr_100g" : "23", "fat" : "42.7", "carbohydrates_value" : "33.5", "proteins_serving" : "1.93", "cocoa_serving" : "70", "sodium_serving" : "0.00492", "salt" : "0.05", ... } Extracto de un documento JSON contenido en la colección productos. (Un ejemplo completo puede verse en la sección de Anexos) La base de datos cuenta con una única colección de productos. Las colecciones en MongoDB son contenedores para documentos de estructura o concepto similar. La colección productos contiene la información referida a los productos.
  • 54. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 54 - > db openfoodfacts > show collections products system.indexes > db.products.stats() { "ns" : "openfoodfacts.products", "count" : 81205, "size" : 1193146012, "avgObjSize" : 14693, "numExtents" : 16, "storageSize" : 1351812288, "lastExtentSize" : 307535872, "paddingFactor" : 1, "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compati bility only.", "userFlags" : 1, "capped" : false, "nindexes" : 39, "totalIndexSize" : 397476240, "indexSizes" : { ... }, "ok" : 1 } Extracto de información de la base de datos.
  • 55. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 55 - 3.2.4. Población y muestra 3.2.4.1. Población La población analizada en este trabajo está constituida por 81.205 etiquetas de productos consumidos en 161 Países. Así mismo, cada etiqueta describe un producto por medio de 159 campos de información. (Ver Anexos) 3.2.4.2. Muestra Todos los productos de la base de datos fueron analizados, pero algunos de ellos fueron excluidos durante el proceso de selección debido a que la información provista por sus etiquetas estaba solo parcialmente completa. Al ser una base de datos abierta y colaborativa, no toda la información de un producto está disponible. Por ello y en virtud de evitar fuertes variaciones e inconsistencias en los indicadores, aquellos productos no fueron tenidos en cuenta por el proceso de análisis de datos. Por lo tanto, la muestra sobre la que están construidos los indicadores está conformada por 38.107 etiquetas de productos. A medida que la información faltante sobre los productos se complete en la base de datos, la información suministrada por los indicadores resultara más precisa. 3.3. Creación de indicadores Para la construcción de indicadores se hizo uso de 3 tecnologías: MongoDB, Apache Spark y Apache Zeppelin. La integración de Apache Spark y Apache Zeppelin se realiza a través del archivo de configuración zeppelin-env.sh de Apache Zeppelin. Mientras que la integración de Apache Spark con Mongo DB se realiza a traves de la librería Spark-MongoDB.
  • 56. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 56 - ## config for integration with Apache Spark export ZEPPELIN_MEM="-Xmx1024m" export ZEPPELIN_JAVA_OPTS="-Dspark.home=/usr/spark" ## load the lib third-party for access to mongoDB export SPARK_SUBMIT_OPTIONS="--packages com.stratio.datasource:spark- mongodb_2.10:0.9.2" La metodología desarrollada para la creación de los indicadores se basó en tres etapas: 1. Carga de datos persistidos en MongoDB. 2. Transformación de datos a través de Apache Spark. 3. Visualización de datos con Apache Zeppelin. 3.3.1. Carga de datos Los datos persistidos en la instancia local de MongoDB fueron cargados en el contexto de Spark a través de la librería Spark-MongoDB desarrollada por Stratio. Esta librería permite leer/escribir datos con Spark SQL desde/hacia colecciones de MongoDB. La versión de Spark-MongoDB utilizada en este trabajo es la versión 0.9.2, la cual trabaja con Scala 2.10, Apache Spark 1.4.0, y MongoDB 3.0.x Tabla 1 - Dependencias Spark-MongoDB Spark-MongoDB Apache Spark MongoDB 0.8.2 – 0.9.2 1.4.0 3.0.x
  • 57. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 57 - Una vez lograda la integración de Apache Spark con Apache Zeppelin, se procedió a leer los datos de la instancia de MongoDB para que puedan ser procesados por Spark. ## load the lib third-party for access to mongoDB z.load("com.stratio.datasource:spark-mongodb_2.10:0.9.2") import org.apache.spark.sql.SQLContext._ import org.apache.spark.sql._ ## load the data to a spark dataframe val options = Map("host" -> "10.0.2.2:27017", "database" -> "openfoodfacts", "collection" -> "products") val df = sqlContext.read.format("com.stratio.datasource.mongodb").options(options).load Para ello, primeramente es necesario agregar la dependencia del conector Spark- MongoDB al contexto de Apache Zeppelin. Apache Zeppelin crea y expone los contextos de Spark, SQL y Zeppelin a través variables disponibles para ambientes Python y Scala. Tabla 2 - Contextos disponibles para ambientes Scala y Python Contexto Variable Spark Context sc SQL Context sqlContext Zeppelin Context Z Los datos de la base de datos fueron cargados en un Dataframe de Spark. Un Dataframe es una colección distribuida de datos organizados en columnas. Es
  • 58. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 58 - conceptualmente equivalente a una tabla en una base de datos relacional. Los Dataframe de Spark pueden ser construidos a partir de una amplia variedad de fuentes, tales como: archivos de datos estructurados, tablas en Hive, bases de datos externas, o RDD existentes. El concepto de Dataframe en Spark está inspirado en los Dataframes introducidos por lenguajes de scripting como R y Python (Pandas). Son la evolución de los RDDs (Resilient Distributed Dataset) y tienen por objetivo:  Mantener todas las ventajas de cálculo paralelizable de los RDD.  Incluir funcionalidad que no tenían los RDD y si otros lenguajes como R o Python Pandas.  Simplificar y potenciar el manejo de los datos.  Incluir de serie la posibilidad de usar SQL contra la información de los Dataframes.  Mejorar las opciones de importación/exportación de los Dataframes.  Permitir la conversión bidireccional entre RDD y Dataframes. Ilustración 22- Spark Dataframes (fuente: https://aspgems.com/blog/big-data/migrando-de-pandas-spark- dataframes)
  • 59. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 59 - El Dataframe con los datos cargados desde la base de datos está disponible a través de la variable df y listo para poder ser analizado por Spark. ## output after load data from database ... df: org.apache.spark.sql.DataFrame = [sortkey: bigint, completed_t: bigint, states: string, emb_codes_20141016: string, countries_tags: array<string>, labels_debug_tags: array<string>, fruits-vegetables-nuts_100g_estimate: string, status_tags: array<string>, fsa_score: string, last_modified_t: bigint, photographers: array<string>, ingredients_text: string, quantity: string, brands: string, origins: string, empty: bigint, traces: string, interface_version_modified: string, ingredients_debug: array<string>, checkers_tags: array<null>, emb_code: string, codes_tags: array<string>, editors_tags: array<string>, product_name: string, informers: array<string>, ingredients_that_may_be_from_palm_oil_n: bigint, editors: array<string>, labels_prev_hierarchy: array<string>, creator: string, code: st... ... 3.3.2. Transformación de datos Una vez construido el Dataframe, es posible manipular los datos para dar comienzo al análisis de datos. La manipulación de datos puede realizarse a través de diversas operaciones sobre el Dataframe. // Create the DataFrame val df = sqlContext.read.format("com.stratio.datasource.mongodb").options(options).load // Show the content of the DataFrame df.show()
  • 60. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 60 - // Print the schema in a tree format df.printSchema() // Select only the "nutriments" column df.select("nutriments").show() // Select products with “quantity” greater than 100 df.filter(df("quantity") > 100).show() // Count products by “countries” df.groupBy("countries").count().show() Dado que los datos en la base de datos no tienen una estructura fija (al contrario, su estructura es más bien flexible), los productos no cuentan con la misma información. Es por ello que fue necesario realizar una transformación y selección de datos antes de poder construir los indicadores propuestos. Los indicadores “Promedio de sal consumida por país”, Promedio de azúcar consumido por país” y “Ranking de productos más grasos” necesitan conocer donde los productos son consumidos para poder operar. Este dato se encuentra representado en el atributo countries del documento JSON de cada producto. El atributo countries contiene una lista separada por coma con todos los países donde ese producto es consumido. Por lo tanto, es necesario realizar una transformación para partir la información de un producto en varias partes, representando cada parte la información de un producto consumido en un país determinado y asi considerar cada parte en los indicadores. Por ejemplo: products.take(10).foreach(println) ... Product(Marks & Spencer Curiously Strong Mints,France,United Kingdom,96,0,,Groceries,14) ... La información debe partirse en dos, para que la información sea tenida en cuenta para ambos países: Francia y UK.
  • 61. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 61 - productsTransfRDD.take(10).foreach(println) ... Product(Marks & Spencer Curiously Strong Mints,France,96,0,,Groceries,14) Product(Marks & Spencer Curiously Strong Mints,United Kingdom,96,0,,Groceries,14) ... Esto transformación puede hacerse por medio de la operación flatMap sobre el RDD de productos. Un RDD es dividido en múltiples particiones, las cuales pueden ser procesadas en diferentes nodos dentro de un clúster de Spark y sobre este se pueden realizar dos tipos de operaciones:  Transformaciones  Acciones Las transformaciones dan como resultado un nuevo RDD, mientras que las acciones son operaciones que dan como resultado un valor final hacia el programa controlador o generan la instrucción de escritura al sistema externo de almacenamiento. Las acciones fuerzan la evaluación de las transformaciones requeridas por el RDD. Spark no ejecuta las transformaciones hasta que aparece una acción (Evaluación Lazy). ## examples of transformations on RDD: map, flatMap and filter ... val productsTransfRDD = productsRDD.map(line => line.split("t")).filter(s=>s(0)!="code").filter(_.size == 159).filter(s=>s(102)!="" & s(117)!="").flatMap(s => s(33).split(",").map(part => Product(s(7), part, s(102), s(117), s(99), s(60), s(158)))) ... ## examples of actions on RDD: first, foreach, take(n), etc. ... productsTransfRDD.take(10).foreach(println) ...
  • 62. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 62 - La operación flatMap es parecida a la operación map pero produce elementos múltiples a partir de cada elemento introducido. En nuestro ejemplo, el valor de la columna countries (representado por s(33)) es particionado (s(33).split(",")) para cada elemento del RDD de productos y por cada uno de estos valores (países) un nuevo producto es creado. Esto dará como resultado un nuevo RDD que contendrá un nuevo producto por cada país de la lista representada por la columna countries. Por otro lado, las transformaciones filter nos permite excluir aquellos productos que no contengan toda la información completa que necesitamos para el análisis de los indicadores (filter(s=>s(102)!="" & s(117)!="")). En el ejemplo, los campos s(102) y s(117) representan los atributos sugar100g y sodium100g respectivamente. Con respecto al indicador “Distribución de productos menos saludables”, fue necesario transformar el RDD de productos en nuevo RDD conteniendo el continente donde es consumido un producto y no el país propiamente dicho. productsTransfRDD.take(5).foreach(println) Result(Luxury Christmas Pudding,United Kingdom,44,0.078740157480315,,Desserts,10) Result(Luxury Christmas Pudding,United Kingdom,44,0.0787,,Sugary snacks,10) Result(Pepsi, Nouveau goût !,France,10.4,0.01,,Beverages,2) Result(7Up,France,10.4,0.0393700787401575,,Beverages,2) Result(Sour Fruit Gummies,Germany,57.5,0.05,,Sugary snacks,14) La información debe partirse transformarse reemplazando cada país por el continente al que pertenece el mismo. productsTransfRegionRDD.take(5).foreach(println)
  • 63. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 63 - Result(Luxury Christmas Pudding,Europa,44,0.078740157480315,,Desserts,10) Result(Luxury Christmas Pudding,Europa,44,0.0787,,Sugary snacks,10) Result(Pepsi, Nouveau goût !,Europa,10.4,0.01,,Beverages,2) Result(7Up,Europa,10.4,0.0393700787401575,,Beverages,2) Result(Sour Fruit Gummies,Europa,57.5,0.05,,Sugary snacks,14) Las transformaciones a realizar son similares a las utilizadas en el resto de los indicadores pero con el agregado de reemplazar cada país por el continente al que pertenece. ## Arrays of Regions val regEuropa = Array("Luxembourg","Bulgaria","Denmark","Portugal","Deutschland","Serbia","Poland" ,"Norway","Andorra","Netherlands","Belgium","Turkey","Ukraine","Other- turquie","Ireland","Slovenia","Albania","es:Europe","Scotland","Czech Republic","pt:Holanda","Sweden","Hungary","France","Russia","Germany","Spain","Lit huania","Romania","Finland","Austria","Switzerland","Greece","United Kingdom","Italy") val regAsia = Array("Thailand","India","Other- japon","Qatar","Indonesia","China","Taiwan","Iraq","Hong Kong","Saudi Arabia","Israel","Lebanon","Singapore","Japan","Kuwait","United Arab Emirates","South Korea") val regAfrica = Array("Egypto","Senegal","Algeria","South Africa","Tunisia","Morocco") val regAmericaNorte = Array("Mexico","United States","Canada","Cuba") val regAmericaSur = Array("Colombia","Chile","Brazil","Argentina","Aruba") val regOceania = Array("New Zealand","Australia") ## build new RDD val df = productsTransfRDD.toDF() val data = df.map(row => { val row1 = row.getAs[String](1) val make = if (regEuropa contains row1) "Europa" else if (regAsia contains row1) "Asia" else if (regAfrica contains row1) "Africa" else if (regAmericaNorte contains row1) "AmericaNorte"
  • 64. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 64 - else if (regAmericaSur contains row1) "AmericaSur" else if (regOceania contains row1) "Oceania" else "Other" Result(row.getAs[String](0),make,row.getAs[String](2),row.getAs[String](3 ),row.getAs[String](4),row.getAs[String](5),row.getAs[Integer](6)) }) Esta transformación se apoya en un conjunto de Arrays que contienen los países pertenecientes a cada continente o región (regAmericaSur, regAmericaNorte, etc.). Mediante la función map, por cada elemento del RDD se obtiene el pais (row.getAs[String](1)) y se reemplaza por el continente al que pertenece ese pais apoyándose en los Arrays definidos previamente. El resultado de esta transformación es un nuevo RDD (data) conteniendo la información de productos clasificada por Continente. Una vez transformados los datos, los mismos son registrados mediante tablas temporales (en memoria) y disponibles para ser consultados a traves de SQL Spark. ## on paragraph indicators 3.1.1, 3.1.2 and 3.1.3 ... products.toDF().registerTempTable("products") ## on paragraph indicators 3.1.1, 3.1.2 and 3.1.3 ... data.toDF().registerTempTable("result") 3.3.3. Visualización de datos En esta tercer y última etapa el resultado del análisis de datos de cada indicador
  • 65. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 65 - fue representado por medio de diferentes graficas con el objetivo de simplificar el análisis de los mismos. Estas graficas pueden ser construidas sobre Apache Zeppelin a través del intérprete Spark SQL, el cual permite acceder al contexto de Spark por medio del lenguaje SQL y así consultar la información procesada por este. Este trabajo está enfocado en el uso de las visualizaciones built-in provistas por Zeppelin, pero otras visualizaciones también pueden lograrse por medio de otros intérpretes. Zeppelin ofrece distintas maneras de visualizar una misma información consultada a través del intérprete SQL:  Por medio de tablas  Por medio grafico de barras  Por medio grafico de barras agrupadas  Por medio grafico de barras seccionadas  Por medio grafico de líneas  Por medio grafico circular  Etc. Estas visualizaciones son dinámicas, permitiendo visualizar la misma información desde diferentes perspectivas o enfoques.
  • 66. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 66 - Ilustración 23 - Visualización por medio de tabla Ilustración 24 - Visualización por medio de grafico de barras agrupadas Ilustración 25 - Visualización por medio de grafico de dispersión 3.3.3.1. Promedio de sal consumida por país El consumo de sal en un país, depende en gran parte de la proporción de sodio que aporta cada uno de los alimentos que el sistema alimentario distribuye en ese
  • 67. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 67 - país. Así, si las cadenas de distribución de alimentos ponen a disposición de la población, alimentos con alto contenido de sal, la probabilidad de que la población consuma este tipo de alimentos es mayor, como así también el riesgo de padecer enfermedades como la hipertensión. Ilustración 26 - Consulta sobre Spark SQL: Promedio de sal por país A través del intérprete Spark SQL, es posible ejecutar una consulta sobre la tabla products y conocer para cada país, cuanta sal en promedio aportan los productos que están expuestos a ser consumidos por su población. La tabla products reside en memoria y fue creada durante el proceso de transformación de datos. // create a temporal table on the SparkContext with the info processed ... products.toDF().registerTempTable("products") ... Esta tabla contiene un conjunto reducido y transformado de la información de los productos contenida en la base de datos. Cada registro de la tabla se representa por medio de la clase Product. // Structure for represent data of a product after that it was analyzed case class Product( product:String, countriesSold:String, sugar100g:String, sodium100g:String, transFat:String, category:String,
  • 68. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 68 - nutritionScore:String ) Para este indicador, de cada Producto nos interesa conocer:  countriesSold: El país donde el producto es vendido  sodium100g: La cantidad de sal que el producto aporta cada 100g de alimento. Para el análisis de la información se optó por una visualización en forma de grafico de barras, pero es posible de manera interactiva optar dinámicamente por otros tipos de visualización de acuerdo al enfoque que se quiera dar a los datos. Ilustración 27 - Indicador: Consumo de sal promedio por país (vista grafico barras) 3.3.3.2. Promedio de azúcar consumida por país Del mismo modo que el consumo de sal en un país, depende en gran parte de la proporción de sodio que los alimentos expuestos al público aportan, el consumo de azúcar de un país se puede determinar por la cantidad de azúcar que aportan aquellos productos que son ofrecidos a su población. Explorar esta información nos permite
  • 69. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 69 - conocer que regiones están expuestas a mayores riesgos respecto de enfermedades crónicas como la diabetes. Ilustración 288 - Consulta sobre Spark SQL: Promedio de azúcar por país Del mismo modo que el indicador anterior, se apoya en los datos procesados y reducidos obtenidos del proceso de transformación, y registrados en la tabla temporal products, para conocer cuanta azúcar en promedio aportan los productos que están expuestos a ser consumidos por cada país. De cada Producto nos interesa conocer:  countriesSold: El país donde el producto es vendido  sugar100g: La cantidad de azúcar que el producto aporta cada 100g de alimento. // Structure for represent data of a product after that it was analyzed case class Product( product:String, countriesSold:String, sugar100g:String, sodium100g:String, transFat:String, category:String, nutritionScore:String ) Para el análisis de la información se optó por una visualización en forma de grafico de
  • 70. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 70 - barras, pero es posible de manera interactiva optar dinámicamente por otros tipos de visualización de acuerdo al enfoque que se quiera dar a los datos. Ilustración 29 - Indicador: Consumo de azúcar promedio por país (vista grafico barras) 3.3.3.3. Ranking de productos más grasos De todas las grasas, la grasa trans es la peor para su salud. Consumir demasiada grasa trans en la alimentación incrementa el riesgo de padecer enfermedades cardiovasculares, muerte súbita de origen cardiaco y diabetes. Las grasas trans se presentan cuando los fabricantes de alimentos convierten aceites líquidos en grasas sólidas con propósitos de conservación, estabilidad y reducción de costos en la elaboración de los productos. Por medio de este indicador podemos explorar los datos en busca de aquellas categorías de alimentos que contengan mayor proporción de grasas trans con el objetivo de excluirlos o reemplazarlos de nuestra dieta.
  • 71. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 71 - Ilustración 30 - Consulta sobre Spark SQL: Ranking de productos más grasos Trabaja sobre la misma estructura de datos que los anteriores indicadores y de la cual nos interesa conocer:  category: La categoría principal a la que corresponde el producto. Ejemplo: Mermeladas.  transFat: El país donde el producto es vendido // Structure for represent data of a product after that it was analyzed case class Product( product:String, countriesSold:String, sugar100g:String, sodium100g:String, transFat:String, category:String, nutritionScore:String ) Para el análisis de la información se optó por una visualización en forma de grafico circular, pero es posible de manera interactiva optar dinámicamente por otros tipos de visualización de acuerdo al enfoque que se quiera dar a los datos. Ilustración 311 – Proporción de grasas trans en los 7 productos más grasos
  • 72. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 72 - El ranking construido define 7 categorías de producto, pero este número puede ser variable y puede configurarse dinámicamente para que construir ranking 5, ranking 10, ranking n, siendo ‘n’ el número de categorías que interese estudiar. Ilustración 322 - Parámetro de formulario para ranking ‘n’ 3.3.3.4. Distribución de productos menos saludables Por medio de este indicador podemos conocer acerca de la distribución de alimentos en cada región en base a su puntuación nutricional. Trabaja sobre el concepto de nutrition score definido por la por la Agencia de Normas Alimentarias del Reino Unido (FSA). Cada producto tiene una puntuación nutricional que va desde los -14 para los alimentos más saludables hasta +40 para los alimentos menos saludables. El objetivo de este indicador es conocer para cada región si su alimentación está basada en alimentos saludables o alimentos poco saludables. Ilustración 33 - Consulta sobre Spark SQL: Distribución de alimentos más y menos saludables por continente Trabaja sobre la tabla temporal result la cual reside en memoria y que fue creada durante el proceso de transformación de datos. // create a temporal table on the SparkContext with the info processed ... data.toDF().registerTempTable("result") ...
  • 73. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 73 - Esta tabla contiene un conjunto reducido y transformado de la información de los productos contenida en la base de datos. Cada registro de la tabla se representa por medio de la clase Result. // Structure for represent data of a product after that it was analyzed case class Result( product:String, countriesSold:String, sugar100g:String, sodium100g:String, transFat:String, category:String, nutritionScore:Integer ) Para la construcción de este indicador, nos interesa conocer:  countriesSold: Representa el continente donde el producto es ofrecido  nutritionScore: El puntaje nutricional definido por UK FSA  cantProductos (calculado con funciones de agregación): Representa la cantidad de productos para un puntaje nutricional y continente dados.  averageProd: (calculado con funciones windows de Spark): Indica que porcentaje del total representa la cantidad de productos definida por cantProductos. Las funciones windows permiten a los usuarios de Spark SQL ejecutar funciones de agregación tales como promedios, rankings, etc. sobre un rango de filas y no sobre todo el conjunto.
  • 74. Big Data: Aplicación y Utilidad en el Sistema Alimentario – Juan Olivera - 74 - Ilustración 34 - Indicador: Distribución de alimentos más y menos saludables por continente (tabla) Para el análisis de la información se optó por una visualización en forma de grafico de dispersión, pero es posible de manera interactiva optar dinámicamente por otros tipos de visualización de acuerdo al enfoque que se quiera dar a los datos. Ilustración 35 – Indicador: Distribución de alimentos más y menos saludables por continente (grafico dispersión)