spark-optimization — скилл для Claude Code: Spark
Скилл помогает разбирать медленные задания Apache Spark и настраивать партиционирование, кэширование, shuffle и память. Подойдёт для пайплайнов обработки данных.
/plugin marketplace add wshobson/agents
/plugin install data-engineering@claude-code-workflowsЧто делает spark-optimization
spark-optimization разбирает узкие места в заданиях Apache Spark: лишний shuffle, перекос данных, неудачное число партиций, давление на память и лишние UDF. Он подсказывает, как применять AQE, broadcast join, встроенные функции и колоночные форматы Parquet или Delta.
Внутри есть схема выполнения Spark, пример настройки SparkSession для PySpark и практические рекомендации по мониторингу Spark UI. Подробные шаблоны вынесены в references/details.md. Скилл стоит поставить, если вы отлаживаете медленные задания или масштабируете пайплайн; для проектов без Apache Spark он не нужен.
Какие задачи решает
- найти причины медленного задания Spark
- настроить партиционирование для параллельной обработки
- снизить shuffle и перекос данных
- подобрать настройки памяти и executor
- заменить лишние UDF встроенными функциями
Примеры запросов агенту
- Разбери медленное задание Apache Spark и предложи, где уменьшить shuffle.
- Проверь этот PySpark-пайплайн: нужны ли кэширование, broadcast join и настройка партиций?
- Настрой SparkSession для чтения Parquet и агрегации данных без лишнего collect.
Как установить spark-optimization
1Через маркетплейс плагинов
/plugin marketplace add wshobson/agents/plugin install data-engineering@claude-code-workflowsКоманда ставит плагин data-engineering целиком, со всеми его скиллами
2Через Skills CLI (Vercel)
npx skills add wshobson/agents --skill spark-optimization -a claude-code3Вручную: положить файлы
~/.claude/skills/spark-optimization/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/spark-optimization/
1Через Skills CLI (Vercel)
npx skills add wshobson/agents --skill spark-optimization -a codex2Вручную: положить файлы
.agents/skills/spark-optimization/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add wshobson/agents --skill spark-optimization -a cursor2Вручную: положить файлы
.cursor/skills/spark-optimization/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install wshobson/agents spark-optimization2Вручную: положить файлы
.github/skills/spark-optimization/SKILL.mdКомандой платформы
gemini skills install https://github.com/wshobson/agents --path plugins/data-engineering/skills/spark-optimizationВручную: положить файлы
.devin/skills/spark-optimization/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора213
Весь набор →Похожие
Вопросы о spark-optimization
Как установить spark-optimization в Claude Code?
Выполните npx skills add wshobson/agents --skill spark-optimization -a claude-code. Файл скилла появится по пути ~/.claude/skills/spark-optimization/SKILL.md.
Что делает spark-optimization?
Скилл помогает оптимизировать задания Apache Spark: уменьшать shuffle, учитывать перекос данных, настраивать партиции и память, а также выбирать подходы для join и сериализации.
Какие технологии рассматривает spark-optimization?
В материалах есть PySpark, Spark UI, AQE, Parquet, Delta и KryoSerializer. Отдельно разобраны кэширование и адаптивное объединение партиций.
Исходный текст
SKILL.md · MIT
---
name: spark-optimization
description: 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.
---
# 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
| Factor | Impact | Solution |
| ----------------- | --------------------- | ----------------------------- |
| **Shuffle** | Network I/O, disk I/O | Minimize wide transformations |
| **Data Skew** | Uneven task duration | Salting, broadcast joins |
| **Serialization** | CPU overhead | Use Kryo, columnar formats |
| **Memory** | GC pressure, spills | Tune executor memory |
| **Partitions** | Parallelism | Right-size partitions |
## Quick Start
```python
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()`
© Seth Hobson · MIT · wshobson/agents