🚀 O que é PySpark?

O PySpark é a interface Python para o Apache Spark, um motor de processamento distribuído projetado para analisar Big Data. Enquanto o Pandas opera em uma única máquina, o Spark opera em um cluster de computadores, dividindo tarefas gigantescas para processá-las em paralelo.

O PySpark é a ferramenta essencial que transforma a teoria de Big Data em prática, permitindo que você lide com o Volume, a Velocidade e a Variedade dos dados.


🐼 Spark DataFrames: A Planilha Distribuída

O Spark DataFrame é a forma mais comum e poderosa de trabalhar com dados no Spark. Ele é uma abstração de alto nível que organiza os dados em colunas e linhas nomeadas, de forma muito parecida com um DataFrame do Pandas ou uma tabela SQL.

O que ele faz? Ele permite que você execute consultas e transformações complexas em conjuntos de dados que não caberiam na memória de um único computador.

Exemplo Prático com Código:

from pyspark.sql import SparkSession

# 1. Cria a sessão Spark
spark = SparkSession.builder.appName("DataFrame_Exemplo").getOrCreate()

# 2. Cria um DataFrame de exemplo (pode ser lido de um arquivo gigante)
dados = [("maçã", 10.5, "lojaA"),
         ("banana", 5.2, "lojaB"),
         ("maçã", 8.0, "lojaA"),
         ("banana", 6.0, "lojaC")]
colunas = ["produto", "preco", "loja"]
df_spark = spark.createDataFrame(dados, colunas)

# 3. Executa operações (agrupamento e média)
media_por_loja = df_spark.groupBy("loja").mean("preco")

# 4. Mostra o resultado (aqui o processamento é executado)
media_por_loja.show()

# 5. Para a sessão Spark
spark.stop()

# Saída:
+-----+-------------+
|loja |  avg(preco) |
+-----+-------------+
|lojaB|          5.2|
|lojaC|          6.0|
|lojaA|         9.25|
+-----+-------------+

🧱 RDDs: O Bloco de Construção

RDDs (Resilient Distributed Datasets) são a fundação do Spark. Eles são coleções de dados distribuídas por todos os nós do cluster, mas sem a estrutura de colunas e linhas.

O que ele faz? Ele oferece um controle mais granular e de baixo nível sobre as operações. RDDs são imutáveis (não podem ser alterados após a criação) e resilientes (se uma parte falha, o Spark reconstrói o dado).

Exemplo Prático com Código:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("RDD_Exemplo").getOrCreate()

# 1. Cria um RDD a partir de uma lista
rdd = spark.sparkContext.parallelize([1, 2, 3, 4, 5])

# 2. Executa uma operação (mapa)
rdd_dobrado = rdd.map(lambda x: x * 2)

# 3. Coleta e mostra o resultado
print(rdd_dobrado.collect())

# 4. Para a sessão Spark
spark.stop()

# Saída: [2, 4, 6, 8, 10]

⚖️ Comparativo PySpark: DataFrames vs. RDDs

Característica RDDs Spark DataFrames
Nível de Abstração Baixo (requer mais código) Alto (mais fácil de usar)
Otimização Manual (o desenvolvedor gerencia) Automática (o Spark otimiza)
Estrutura Sem estrutura, coleção de objetos Estrutura de colunas e linhas
Performance Boa, mas exige otimização manual Geralmente superior por causa do otimizador interno
Quando Usar? Para operações muito complexas ou que não se encaixam em tabelas Na maioria dos casos de Engenharia e Análise de Dados