Los requerimientos listados en problemStatement.pdf sugieren un acercamiento deductivo y serializado. En otras palabras, no se puede avanzar al siguiente objetivo sin antes haber reuelto los anteriores.
El primer y segundo requerimiento expresan que el dataset debe ser acondicionado para poder desplegar los metadatos propios de un string en formato JSON.
El tercer requerimiento consiste en presentar dos medidas de estadística descriptiva (media y desviación estandar) de tres metadatos, esto es para todas las columnas.
Por último, se requiere presentar las mismas medidas para los mismos metadatos, solo que ahora hay una condición de filtrado implicita, que obliga al desarrollador a tratar con las expresiones más profundas y elementales del esquema JSON.
La estrategia se puede resumir en 3 etapas consecutivas y ordenadas:
- Acondicionamiento y carga del dataset.
- Creación de RDDs y DataFrames de manera deductiva.
- Presentación de resultados.
Estas etapas están subdivididas en 9 secciones, mismas que están comentadas en el archivo source_code.ipynb:
- Definimos la cabecera del proyecto.
- Declaramos la ruta del dataset (que es una copia destilada del archivo original).
- Leemos el archivo para crear el primer cleanMolochDataRDD.
- Creamos un DF (DF_Moloch) a partir del RDD del paso anterior.
- Creamos un RDD (RDD_OnlyJsonData) que contenga solo las strings en formato JSON
- Creamos el DF (onlyJsonData_DF) a partir del RDD de strings en formato JSON.
- Declaramos el DF srcIP_DF a partir del DF onlyJsonData_DF.
- Declaramos el DF groupByProtocol_DF a partir del DF onlyJsonData_DF.
- Hacemos un filtro del DF por jerarquía de protocolos.
-
/data_sources: Directorio que contiene el archivo de trabajo (dataSyntheticMoloch.csv). Este dierectorio tambien contiene un cuaderno de pruebas para la limpieza del dataset (cleaning_dataset.ipynb) y una copia del dataset original (clean_dataSyntheticMoloch.csv).
-
problemStatement.pdf: Archivo pdf donde se especifican los requerimientos del proyecto.
-
source_code.ipynb: Es el cuaderno (Jupyter Notebook) donde está el desarrollo de la prueba técnica.
-
La versión en inglés del Jupyter Notebook principal.
-
Un script/cuaderno mejor definido para la automatización de la limpieza del archivo csv original.
-
La versión en inglés del README.md.
Este proyecto fue elaborado con el siguiente stack:
- Jupyter Notebook / ipython 7.12.0
- Python 3.7.9
- Spark v2.4.7
- Ubuntu 20.04.2 LTS