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.
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 (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]
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 |