spark-optimization
Faz seu agente otimizar o processamento de dados no Apache Spark. Melhora a velocidade e eficiência de tarefas grandes de análise de dados.
O que ela faz
Esta ferramenta ajuda a fazer com que programas de computador que processam grandes quantidades de dados (chamados 'jobs' no Apache Spark) rodem mais rápido. Ela ajusta como os dados são organizados e processados para evitar lentidão.
Quando usar
- ✓Seu programa de processamento de dados está demorando muito para terminar.
- ✓Você precisa analisar ou processar uma quantidade enorme de dados de forma eficiente.
- ✓Seu programa está travando ou usando muita memória.
Exemplo do que pedir para a IA
“Como posso fazer meu programa Spark rodar mais rápido?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A ferramenta analisa como seu programa está funcionando e sugere ajustes. Isso pode incluir mudar a forma como os dados são divididos em pedaços menores para processamento paralelo ou otimizar o uso da memória do computador.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add sickn33/agentic-awesome-skills --skill spark-optimizationOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/spark-optimization/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Otimização do Apache Spark
Padrões de produção para otimizar jobs do Apache Spark, incluindo estratégias de particionamento, gerenciamento de memória, otimização de shuffle e ajuste de performance.
Não use esta habilidade quando
- A tarefa não estiver relacionada à otimização do Apache Spark
- Você precisar de um domínio ou ferramenta diferente fora deste escopo
Instruções
- Clarifique objetivos, restrições e entradas necessárias.
- Aplique melhores práticas relevantes e valide os resultados.
- Forneça passos acionáveis e verificação.
Use esta habilidade quando
- Otimizando jobs Spark lentos
- Ajustando a configuração de memória e executores
- Implementando estratégias eficientes de particionamento
- Depurando problemas de performance do Spark
- Escalando pipelines Spark para grandes conjuntos de dados
- Reduzindo shuffle e assimetria de dados (data skew)
Conceitos Principais
1. Modelo de Execução do Spark
Driver Program
↓
Job (triggered by action)
↓
Stages (separated by shuffles)
↓
Tasks (one per partition)
2. Fatores Chave de Performance
| Fator | Impacto | Solução |
|---|---|---|
| Shuffle | I/O de rede, I/O de disco | Minimizar transformações amplas (wide transformations) |
| Assimetria de Dados (Data Skew) | Duração desigual das tarefas | Salting, broadcast joins |
| Serialização | Sobrecarga de CPU | Usar Kryo, formatos colunares |
| Memória | Pressão de GC, spills | Ajustar memória do executor |
| Partições | Paralelismo | Dimensionar corretamente as partições |
Início Rápido
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
# Create optimized Spark session
spark = (SparkSession.builder
.appName("OptimizedJob")
.config("spark.sql.adaptive.enabled", "true")
.config("spark.sql.adaptive.coalescePartitions.enabled", "true")
.config("spark.sql.adaptive.skewJoin.enabled", "true")
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.config("spark.sql.shuffle.partitions", "200")
.getOrCreate())
# Read with optimized settings
df = (spark.read
.format("parquet")
.option("mergeSchema", "false")
.load("s3://bucket/data/"))
# Efficient transformations
result = (df
.filter(F.col("date") >= "2024-01-01")
.select("id", "amount", "category")
.groupBy("category")
.agg(F.sum("amount").alias("total")))
result.write.mode("overwrite").parquet("s3://bucket/output/")
Padrões
Padrão 1: Particionamento Ideal
# Calculate optimal partition count
def calculate_partitions(data_size_gb: float, partition_size_mb: int = 128) -> int:
"""
Optimal partition size: 128MB - 256MB
Too few: Under-utilization, memory pressure
Too many: Task scheduling overhead
"""
return max(int(data_size_gb * 1024 / partition_size_mb), 1)
# Repartition for even distribution
df_repartitioned = df.repartition(200, "partition_key")
# Coalesce to reduce partitions (no shuffle)
df_coalesced = df.coalesce(100)
# Partition pruning with predicate pushdown
df = (spark.read.parquet("s3://bucket/data/")
.filter(F.col("date") == "2024-01-01")) # Spark pushes this down
# Write with partitioning for future queries
(df.write
.partitionBy("year", "month", "day")
.mode("overwrite")
.parquet("s3://bucket/partitioned_output/"))
Padrão 2: Otimização de Join
from pyspark.sql import functions as F
from pyspark.sql.types import *
# 1. Broadcast Join - Junção de tabelas pequenas
# Melhor quando: Um lado < 10MB (configurável)
small_df = spark.read.parquet("s3://bucket/small_table/") # < 10MB
large_df = spark.read.parquet("s3://bucket/large_table/") # TBs
# Dica explícita de broadcast
result = large_df.join(
F.broadcast(small_df),
on="key",
how="left"
)
# 2. Sort-Merge Join - Padrão para tabelas grandes
# Requer shuffle, mas lida com qualquer tamanho
result = large_df1.join(large_df2, on="key", how="inner")
# 3. Bucket Join - Pré-ordenado, sem shuffle no momento do join
# Escrever tabelas particionadas (bucketed)
(df.write
.bucketBy(200, "customer_id")
.sortBy("customer_id")
.mode("overwrite")
.saveAsTable("bucketed_orders"))
# Juntar tabelas particionadas (sem shuffle!)
orders = spark.table("bucketed_orders")
customers = spark.table("bucketed_customers") # Mesma contagem de buckets
result = orders.join(customers, on="customer_id")
# 4. Tratamento de Skew Join
# Habilitar otimização de skew join do AQE
spark.conf.set("spark.sql.adaptive.skewJoin.enabled", "true")
spark.conf.set("spark.sql.adaptive.skewJoin.skewedPartitionFactor", "5")
spark.conf.set("spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes", "256MB")
# Salting manual para skew severo
…
Perguntas frequentes
O que é 'shuffle'?
Shuffle é quando o programa precisa reorganizar os dados entre diferentes computadores para processá-los. Isso pode ser lento, e a ferramenta ajuda a minimizar essa etapa.
O que é 'particionamento'?
Particionamento é dividir os dados em pedaços menores. Ter o número certo de pedaços ajuda o programa a trabalhar mais rápido, usando vários computadores ao mesmo tempo.
Preciso saber programar para usar isso?
Não é preciso ser um expert, mas entender o básico de como o programa funciona ajuda a usar melhor as sugestões da ferramenta.
Detalhes
Descrição original do autor
Optimize Apache Spark jobs with partitioning, caching, shuffle optimization, and memory tuning. Use when improving Spark performance, debugging slow jobs, or scaling data processing pipelines.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #4222
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
pytorch-patterns
Ajuda seu agente a usar o PyTorch para criar modelos de aprendizado de máquina. Ele aplica as melhores práticas para treinar modelos de forma eficiente e garantir que os resultados sejam consistentes.
affaan-m/ECC
evm-token-decimals
Ajuda seu agente a evitar erros com números decimais em diferentes redes blockchain. Garante que os valores de tokens sejam precisos em transações e cálculos.
affaan-m/ECC
knowledge-agent
Cria e consulta bases de conhecimento com inteligência artificial. Permite fazer perguntas sobre trabalhos passados ou compilar conhecimento sobre um tema.
thedotmack/claude-mem