New to Claude Skills? Learn how to install them →

wshobson on GitHub

Apache Spark Optimization

Free

Enhance your Spark jobs for better performance and efficiency.

Get this skill

Free · Opens the source repo

What Apache Spark Optimization does

Apache Spark Optimization is a skill designed to help developers and data engineers improve the performance of their Spark jobs through various optimization techniques. It covers essential strategies such as partitioning, memory management, shuffle optimization, and performance tuning. By applying these techniques, users can significantly reduce job execution time and resource consumption, making their data processing pipelines more efficient.

The skill provides a structured approach to diagnosing and resolving performance issues in Spark applications. It emphasizes the importance of understanding the Spark execution model, which includes the driver program, jobs, stages, and tasks. By leveraging this knowledge, users can identify bottlenecks and implement solutions that directly address performance challenges, such as data skew and excessive shuffling.

Included in this skill are best practices for configuring Spark sessions, such as enabling Adaptive Query Execution (AQE) and utilizing efficient data formats like Parquet or Delta. Users are guided on how to monitor their Spark applications effectively using the Spark UI, allowing them to make informed decisions based on real-time performance metrics. This skill is particularly beneficial for teams working with large datasets who need to optimize their Spark jobs for better scalability and performance.

Whether you are debugging slow jobs or looking to scale your data processing capabilities, Apache Spark Optimization provides the foundational knowledge and practical strategies necessary to enhance your Spark applications.

When to use it

Use this skill when you need to optimize Spark jobs, tune memory configurations, or debug performance issues in your data processing pipelines.

When not to use it

This skill may not be suitable for users who are unfamiliar with Spark concepts or those looking for a general-purpose optimization tool outside of Spark.

What you can build with it

Optimizing a Slow Job

When facing a slow-running Spark job, this skill guides you through identifying performance bottlenecks and applying optimization techniques.

Tuning Memory Configurations

Use this skill to adjust executor memory settings and improve garbage collection performance, ensuring smoother job execution.

Scaling Data Processing Pipelines

When working with large datasets, this skill helps you implement effective partitioning strategies and manage resources efficiently.

How to install Apache Spark Optimization

View source

1. Install with the skills CLI

npx skills add wshobson/agents/spark-optimization --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by wshobson

Apache Spark Optimization

Production patterns for optimizing Apache Spark jobs including partitioning strategies, memory management, shuffle optimization, and performance tuning.

When to Use This Skill

  • Optimizing slow Spark jobs
  • Tuning memory and executor configuration
  • Implementing efficient partitioning strategies
  • Debugging Spark performance issues
  • Scaling Spark pipelines for large datasets
  • Reducing shuffle and data skew

Core Concepts

1. Spark Execution Model

Driver Program
    ↓
Job (triggered by action)
    ↓
Stages (separated by shuffles)
    ↓
Tasks (one per partition)

2. Key Performance Factors

FactorImpactSolution
ShuffleNetwork I/O, disk I/OMinimize wide transformations
Data SkewUneven task durationSalting, broadcast joins
SerializationCPU overheadUse Kryo, columnar formats
MemoryGC pressure, spillsTune executor memory
PartitionsParallelismRight-size partitions

Quick Start

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/")

Detailed patterns and worked examples

Detailed pattern documentation lives in references/details.md. Read that file when the navigation tier above is insufficient.

Best Practices

Do's

  • Enable AQE - Adaptive query execution handles many issues
  • Use Parquet/Delta - Columnar formats with compression
  • Broadcast small tables - Avoid shuffle for small joins
  • Monitor Spark UI - Check for skew, spills, GC
  • Right-size partitions - 128MB - 256MB per partition

Don'ts

  • Don't collect large data - Keep data distributed
  • Don't use UDFs unnecessarily - Use built-in functions
  • Don't over-cache - Memory is limited
  • Don't ignore data skew - It dominates job time
  • Don't use .count() for existence - Use .take(1) or .isEmpty()

Frequently asked questions about Apache Spark Optimization

Similar skills