Pular para o conteúdo
Skillpedia
Machine learning48 mil · #4222

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

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/spark-optimization/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/spark-optimization/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-optimization

Ou 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.md
Conteú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.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#4222
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas