---
Hola y bienvenido a la Computación Paralela con Dask. Soy Dhavide Aruliah. Este curso trata sobre la biblioteca de Python Dask que ayuda a los científicos de datos a escalar sus análisis sin complicaciones.
Primero, preguntémonos qué significa "Big Data". En términos generales, son más datos de los que una sola máquina puede manejar. Para entenderlo con precisión, necesitamos discutir el almacenamiento informático.
Primero, aclaremos las unidades de almacenamiento. En unidades métricas convencionales, prefijos como kilo-, mega-, giga- y tera- denotan factores de 1000. Por ejemplo, kiloWatt, megaWatt, gigaWatt y teraWatt significan 10^3, 10^6, 10^9 y 10^{12} Watts respectivamente. Sin embargo, las computadoras utilizan notación binaria o base 2, no base 10. La unidad base de almacenamiento de datos es el dígito binario o bit. Ocho bits forman un byte de datos. Así que, con los datos, es convencional usar kilo-, mega-, giga- y tera- para escalar las unidades por $2^{10}$ o 1,024 (porque eso es casi 1000). Entonces, un kilobyte son 2^10 bytes, un megabyte son 2^20 bytes, un gigabyte son 2^30 bytes y así sucesivamente.
Los discos duros se utilizan para almacenamiento permanente...
...Actualmente, los discos duros pueden acomodar terabytes de datos pero requieren milisegundos para acceder a los datos.
Las computadoras utilizan Memoria de Acceso Aleatorio (RAM) para almacenamiento temporal. Los datos en RAM desaparecen al apagarse. Los datos pueden recuperarse de la RAM en nanosegundos a microsegundos, pero las configuraciones de RAM más grandes son un puñado de gigabytes en el mejor de los casos hoy en día.
Esta tabla (modificada de una tabla de Brendan Gregg) cuenta la historia. Estos son los tiempos de transferencia de datos desde RAM, discos duros y la internet, (digamos, de San Francisco a Nueva York). Lo que importa son las escalas de tiempo relativas: nanosegundos a microsegundos a milisegundos. Si pretendemos que la transferencia desde RAM toma un segundo. Entonces, la transferencia desde un disco de estado sólido toma de 7 a 21 minutos, la transferencia desde un disco duro rotativo toma de dos horas y media a un día completo, y la transferencia desde la internet toma casi 4 días.
Esto es lo que realmente significa big data. Cuando los datos desbordan de la RAM al disco duro o a la nube, el tiempo de procesamiento relativo efectivamente salta de segundos a minutos o días.
Con eso en mente, examinemos el uso de memoria en mi laptop.
Necesitamos herramientas de los módulos psutil y os, así que los importamos. Luego definimos una función personalizada memory_footprint() para devolver cuánta memoria (en MB) utiliza el proceso de Python. No tenemos que entender su funcionamiento interno, pero notamos que el resultado devuelto se reescala de bytes a megabytes.
Importamos NumPy y llamamos a memory footprint antes de hacer cualquier trabajo. Luego creamos un array de NumPy x que requiere 50 MB de almacenamiento y luego llamamos a memory footprint nuevamente para ver el uso de memoria después. Efectivamente, el proceso tomó aproximadamente otros 50 MB del sistema operativo para crear x.
Luego calculamos `x` al cuadrado y nuevamente calculamos el uso de memoria antes y después. Encontramos que se adquiere un adicional de 50 MB de RAM para este cálculo (aunque el resultado calculado `x**2` no está realmente vinculado a un identificador).
Podemos usar el atributo `nbytes` de un array de numpy para averiguar sus requisitos de memoria reales. El resultado se da en bytes. Dividiendo por 1024^2 se obtiene el tamaño en megabytes (un número más legible).
También podemos crear un DataFrame de Pandas `df` usando `x`. El DataFrame tiene un atributo `memory_usage()` que devuelve una Serie Entera que resume su huella de memoria en Bytes. Como antes, podemos dividir por 1024^2 para obtener la huella de memoria en megabytes.
Así que, antes de sumergirnos en Dask, intenta algunos ejercicios para asegurarte de cuánto memoria estás usando.
#TutorialPython #AlmacenamientoInformático #Python #DataCamp #BigData #programaciónparalela #dask