---
Olá e bem-vindo ao Computação Paralela com Dask. Eu sou Dhavide Aruliah. Este curso é sobre a biblioteca Python Dask que ajuda cientistas de dados a escalarem suas análises sem dor.
Primeiro, vamos perguntar o que "Big Data" significa. Grosso modo, é mais dados do que uma única máquina pode acomodar. Para entender isso precisamente, precisamos discutir o armazenamento de computadores.
Primeiro, vamos esclarecer as unidades de armazenamento. Em unidades métricas convencionais, prefixos como quilo-, mega-, giga- e tera- denotam fatores de 1000. Por exemplo, quiloWatt, megaWatt, gigaWatt e teraWatt significam 10^3, 10^6, 10^9 e 10^{12} Watts, respectivamente. No entanto, os computadores usam notação binária ou base 2, não base 10. A unidade base de armazenamento de dados é o dígito binário ou bit. Oito bits formam um byte de dados. Assim, com dados, é convencional usar quilo-, mega-, giga- e tera- para escalar as unidades em $2^{10}$ ou 1.024 (porque isso é quase 1000). Então, um quilobyte é 2^10 bytes, um megabyte é 2^20 bytes, um gigabyte é 2^30 bytes e assim por diante.
Discos rígidos são usados para armazenamento permanente...
...Atualmente, os discos rígidos podem acomodar terabytes de dados, mas requerem milissegundos para acessar os dados.
Os computadores usam Memória de Acesso Aleatório (RAM) para armazenamento temporário. Os dados na RAM desaparecem quando desligados. Os dados podem ser recuperados da RAM em nanosegundos a microssegundos, mas as maiores configurações de RAM são algumas centenas de gigabytes, no máximo, hoje.
Esta tabela (modificada de uma tabela de Brendan Gregg) conta a história. Estes são os tempos de transferência de dados da RAM, discos rígidos e da internet (digamos, de São Francisco a Nova York). O que importa são as escalas de tempo relativas - nanosegundos a microssegundos a milissegundos. Se fingirmos que a transferência da RAM leva um segundo. Então, a transferência de um disco de estado sólido leva de 7 a 21 minutos, a transferência de um disco rígido rotativo leva de duas horas e meia a um dia inteiro, e a transferência da internet leva quase 4 dias.
Isso é o que big data realmente significa. Quando os dados transbordam da RAM para o disco rígido ou para a nuvem, o tempo de processamento relativo efetivamente salta de segundos para minutos ou dias.
Com isso em mente, vamos examinar o uso de memória no meu laptop.
Precisamos de ferramentas dos módulos psutil e os, então importamos esses. Em seguida, definimos uma função personalizada memory_footprint() para retornar quanto de memória (em MB) o processo Python usa. Não precisamos entender seu funcionamento interno, mas note que o resultado retornado é reescalado de bytes para megabytes.
Importamos o NumPy e chamamos memory footprint antes de fazer qualquer trabalho. Em seguida, criamos um array NumPy x que requer 50 MB de armazenamento e então chamamos memory footprint novamente para ver o uso de memória depois. Certamente, o processo puxou aproximadamente mais 50 MB do sistema operacional para criar x.
Em seguida, calculamos `x` ao quadrado e novamente calculamos o uso de memória antes e depois. Descobrimos que mais 50 MB de RAM são adquiridos para esse cálculo (mesmo que o resultado calculado `x**2` não esteja realmente vinculado a um identificador).
Podemos usar o atributo `nbytes` de um array numpy para descobrir suas reais necessidades de memória. O resultado é dado em bytes. Dividindo por 1024^2, obtemos o tamanho em megabytes (um número mais legível).
Também podemos criar um DataFrame do Pandas `df` usando `x`. O DataFrame tem um atributo `memory_usage()` que retorna uma Série Inteira resumindo sua pegada de memória em Bytes. Como antes, podemos dividir por 1024^2 para obter a pegada de memória em megabytes.
Então, antes de mergulharmos no Dask, tente alguns exercícios para ter certeza de quanto de memória você está usando.
#TutorialPython #ArmazenamentoComputadores #Python #DataCamp #BigData #programação paralela #dask