# scala-spark

Набор инструкций для GitHub Copilot по разработке на Apache Spark в Scala. Помогает писать быстрые трансформации, настраивать партиционирование и избегать падений памяти.

- правило · `type=rule` · GitHub Copilot · ★ 40418
- Автор: github · официальный репозиторий GitHub
- Лицензия: MIT · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/github/awesome-copilot/tree/HEAD/instructions/scala-spark.instructions.md
- Обновлён: 2026-10-23
- HTML: https://affpapa.org/nevibecode/rules/scala-spark

## Что делает

Правило активируется для файлов `**/*.scala`, `**/build.sbt` и `**/build.sc`. Оно указывает Copilot генерировать зависимости Spark (`spark-core`, `spark-sql`, `spark-mllib`) со скоупом `provided`, потому что кластер предоставляет их во время выполнения. Также правило запрещает создавать несколько `SparkSession` внутри одной JVM и жёстко прописывать параметр `master` в коде.

Ассистент приучается предпочитать DataFrame API вместо сырых RDD или тяжеловесных Dataset, когда строгая типизация не окупает накладные расходы на сериализацию. Для джойнов правило предлагает использовать `broadcast()` на датасетах меньше 100 МБ, солить ключи при скошенных данных или включать адаптивное выполнение AQE (`spark.sql.adaptive.skewJoin.enabled`).

Без явной схемы для полуструктурированных данных `inferSchema` вычитает весь файл целиком и затормозит пайплайн. Правило заставляет сразу объявлять `StructType` при чтении JSON и блокирует опасные вызовы вроде `coalesce(1)` на больших распределённых таблицах.

## Установка

### GitHub Copilot (родная платформа)

**Вручную: положить файлы**
- Файл: `.github/instructions/scala-spark.instructions.md` — Поле applyTo задаёт, к каким файлам применять

### Claude Code

**Вручную: положить файлы**
- Файл: `.claude/rules/scala-spark.md` — Поле paths во frontmatter ограничивает файлы: applyTo из источника → paths

### Codex

**AGENTS.md**
- Codex читает AGENTS.md: вставьте текст правила туда

### Cursor

**Вручную: положить файлы**
- Файл: `.cursor/rules/scala-spark.mdc` — Во frontmatter: description, globs, alwaysApply. applyTo из источника → globs, иначе правило само не подключится

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/rules/scala-spark.md`

### Cline

**Вручную: положить файлы**
- Файл: `.clinerules/scala-spark.md`

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/github/awesome-copilot/tree/HEAD/instructions/scala-spark.instructions.md

## Когда брать
- запретить тяжёлый вывод схемы inferSchema при чтении JSON
- настроить зависимости Spark в build.sbt со скоупом provided
- оптимизировать перекошенные джойны через broadcast или AQE
- предотвратить перегрузку единственного экзекьютора через coalesce(1)

## Примеры запросов агенту
- Сгенерируй сессию SparkSession с сериализатором KryoSerializer и 200 партициями шаффла.
- Напиши чтение событий из JSON с явной схемой StructType без inferSchema.
- Сделай левый джойн большой таблицы со справочником через broadcast.

Из того же набора: [github/awesome-copilot](https://affpapa.org/nevibecode/by/github/awesome-copilot.md) — 861 карточка

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
