Se você é engenheiro ou cientista de dados, com certeza já trabalhou ou, pelo menos, já ouviu falar do Pandas. Ele é uma das bibliotecas mais populares do Python, pois oferece uma grande quantidade de funcionalidades para manipular dados, incluindo operações de seleção, filtragem, agregação e transformação.
No entanto, uma de suas principais limitações é a questão de escalabilidade. Isso porque o Pandas é projetado para operar em memória e em um único nó. Assim, à medida que o tamanho dos dados aumenta, pode apresentar lentidão ou até mesmo travar. Dessa forma, é possível que quem trabalha com dados precise fazer uma migração de um projeto Pandas para o Apache Spark.
O Spark é uma solução projetada para processar grandes conjuntos de dados de forma rápida e escalável. Ele divide os dados em pequenas partes e distribui o processamento dessas partes em diferentes nós de um cluster, permitindo que grandes quantidades de dados sejam processadas muito mais rapidamente do que seria possível em um único computador.
Com a consolidação do Apache Spark, surgiram soluções para utilizar a biblioteca Pandas dentro do ambiente distribuído do Spark. Uma dessas soluções é a biblioteca Koalas, que permite que os usuários escrevam código Pandas e aproveitem a capacidade de processamento distribuído do Spark. No entanto, é importante mencionar que o Koalas apresenta algumas limitações, como problemas de escalabilidade em relação ao Spark nativo e restrições em relação a algumas operações oferecidas pelo Pandas.
A solução mais recente é o pyspark.pandas, que é uma API projetada para ser otimizada para o Spark. Ela oferece suporte total às operações do Pandas e foi projetada para fornecer desempenho de alta velocidade em grandes conjuntos de dados. A biblioteca mantém a mesma sintaxe e operações do Pandas, aproveitando a capacidade de processamento distribuído do Spark. Com ela, é possível escrever código Pandas que pode ser executado em um cluster Spark sem precisar fazer muitas alterações.
Além disso, a biblioteca oferece suporte a outras funcionalidades do Spark, como processamento de streaming, SQL e machine learning, permitindo que os usuários tirem proveito de todas as capacidades do Spark em um ambiente familiar do Pandas.
Veremos agora um pequeno exemplo de código utilizando a biblioteca pandas, e depois o Pandas API.
PANDAS
# importando a biblioteca pandas
import pandas as pd
# Criando dataframe
dados = {'nome': ['João', 'Carol', 'Carlos', 'Amanda'], 'idade': [23, 41, 13, 7], 'sexo': ['M', 'F', 'M', 'F']}
df = pd.DataFrame(data=dados)
# Verificando o tipo do dataframe
print(type(df))
<class 'pandas.core.frame.DataFrame'>
# Exibe as primeiras 5 linhas da base de dados
df.head()
# Separando homens e mulheres em novos dataframes
df_homens = df[df['sexo'] == 'M']
df_mulheres = df[df['sexo'] == 'F']
# Média de idade entre os homens
df_homens['idade'].mean()
Out[7]: 18.0
# Média de idade entre as mulheres
df_mulheres['idade'].mean()
Out[8]: 24.0
PANDAS API:
import pyspark.pandas as ps
# Criando o mesmo dataframe, agora utilizando a biblioteca pyspark.pandas
df2 = ps.DataFrame(data=dados)
# Verificando o tipo do dataframe
print(type(df2))
<class 'pyspark.pandas.frame.DataFrame'>
# Realizando as mesmas operações anteriores, agora com o pyspark.pandas
df2.head()
# Separando homens e mulheres em novos dataframes
df_homens = df[df['sexo'] == 'M']
df_mulheres = df[df['sexo'] == 'F']
# Média de idade entre os homens
df_homens['idade'].mean()
Out[14]: 18.0
# Média de idade entre as mulheres
df_mulheres['idade'].mean()
Out[15]: 24.0