Ambos oferecem uma ampla gama de ferramentas e vantagens que podem nos fazer duvidar de qual dos dois escolher em algum momento. Não se trata de mudar todos os processos da empresa para que passem a usar Polars ou uma “morte” aos Pandas (isto não vai acontecer num futuro imediato). Trata-se de conhecer outras ferramentas que podem nos ajudar a reduzir custos e tempo nos processos, obtendo resultados iguais ou melhores.
Quando usamos serviços em nuvem, priorizamos certos fatores, incluindo seu custo. Os serviços que utilizo para este processo são AWS Lambda com o tempo de execução Python 3.10 e S3 para armazenar o arquivo bruto e o arquivo convertido em parquet.
A intenção é obter um arquivo CSV como dados brutos e processá-lo com pandas e polar com o intuito de verificar qual dessas duas bibliotecas nos oferece melhor otimização de recursos como memória e peso do arquivo resultante.
]Pandas
É uma biblioteca Python especializada em manipulação e análise de dados, é escrita em C e seu lançamento inicial foi em 2008.
*Polares *
É uma biblioteca Python e Rust especializada em manipulação e análise de dados que permite processos paralelos e é escrita principalmente em Rust e foi lançada em 2022.
A arquitetura do processo:
O projeto é um tanto simples como mostrado na arquitetura: O usuário deposita um arquivo CSV em work/pandas ou work/porlas e inicia automaticamente o gatilho s3 para processar o arquivo para convertê-lo em parquet e depositá-lo em processado.
Neste pequeno projeto use dois lambdas com a seguinte configuração:
Memória: 2GB
Memória efêmera: 2 GB
Tempo de vida: 600 segundos
Requisitos
Lambda com pandas: Pandas, Numpy e Pyarrow
Lambda com polares: Polares
O conjunto de dados usado para a comparação está disponível no kaggle com o nome “Rotten Tomatoes Movie Reviews – 1,44M rows” ou pode ser baixado aqui.
O repositório completo está disponível no GitHub e pode ser clonado aqui.
Tamanho ou Peso
O lambda que o Pandas usa requer mais dois plugins para criar um arquivo parquet, neste caso é o PyArrow e uma versão específica do numpy para a versão do Pandas que eu estava usando. Como resultado, obtivemos um lambda com peso ou tamanho de 74,4 MB, algo muito próximo do limite que a AWS nos permite para o peso do lambda.
O lambda com Polars não requer outro plugin como o PyArrow, o que torna a vida mais simples e reduz o tamanho do lambda para menos da metade. Como resultado, nosso lambda tem um peso ou tamanho de 30,6 MB em relação ao primeiro, nos dando espaço para instalar outras dependências que possamos precisar para nosso processo de transformação.
Desempenho
O lambda com Pandas foi otimizado para usar compressão após a primeira versão, porém seu comportamento também foi analisado.
Pandas
Demorou 18 segundos para processar o conjunto de dados e utilizou 1894 MB de memória para processar o arquivo CSV e gerar um arquivo Parquet em comparação com as outras versões, foi a que mais consumiu tempo e recursos.
Compressão Pandas
Adicionar uma linha de código permitiu melhorar um pouco em relação à versão anterior (Pandas), demorou 17 segundos para processar o conjunto de dados e utilizou 1837 MB, o que não representa uma melhoria significativa no tempo de processamento e computacional, mas sim no tamanho. do arquivo resultante.
Polares
Demorou 12 segundos para processar o mesmo conjunto de dados e usei apenas 1462 MB, comparado aos dois anteriores representa uma economia de tempo de 44,44% e menor consumo de memória.
Tamanho do arquivo de saída
Pandas
O lambda em que não foi estabelecido um processo de compressão gerou um arquivo parquet de 177,4 MB.
Compressão Pandas
Ao configurar a compactação no lambda, não gero um arquivo parquet de 121,1 MB. Uma pequena linha ou opção nos ajudou a reduzir o tamanho do arquivo em 31,74%. Considerando que não é uma alteração significativa de código, é uma opção muito boa.
Polares
A Polars gerou um arquivo de 105,8 MB que, adquirido com a primeira versão do Pandas, representa uma economia de 40,36% e 12,63% em relação à versão Pandas com compressão.
Conclusão
Não é necessário alterar todos os processos internos que utilizam Pandas para que agora utilizem Polars, porém, é importante considerar que se estamos falando de milhares ou milhões de execuções de lambda, utilizar Polars nos ajudará não só na implantação tempo, mas também nos ajudará a ter um custo menor devido à cobrança baseada no tempo que a AWS faz para serviços sem servidor, como Lambda.
Da mesma forma, quando traduzimos esses 40,36% em milhões de arquivos estamos falando de GBs ou TBs, algo que teria um impacto significativo dentro de uma casa Datalake ou Dataware ou mesmo em um armazenamento frio de arquivos.
A redução com Polars não se limitaria apenas a esses dois fatores, pois afetaria muito a saída de dados e/ou objetos da AWS por ser um serviço que tem um custo.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3