# pyspark-etl-best-practices-cursorrules-prompt-file

Правило для Cursor, которое задаёт стиль PySpark-кода: F.col(), явные joins, select вместо withColumn и работа с Iceberg.

- правило · `type=rule` · Cursor · ★ 41011
- Автор: PatrickJS
- Лицензия: CC0-1.0 · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/PatrickJS/awesome-cursorrules/tree/HEAD/rules/pyspark-etl-best-practices-cursorrules-prompt-file.mdc
- Обновлён: 2026-05-30
- HTML: https://affpapa.org/nevibecode/rules/pyspark-etl-best-practices-cursorrules-prompt-file

## Что делает

Файл описывает, как Cursor должен писать и проверять код PySpark, Spark SQL и Apache Iceberg. Внутри — набор требований по структуре проекта и стилю. Например, базовый класс ETL с абстрактным методом `run_job`, конфиг через отдельную фабричную функцию, чтобы тесты не трогали `sys.argv`, и композиция пайплайна через `.transform()`.

По стилю правило требует везде использовать префикс `F.` — `F.col()`, `F.when()`, `F.lit()` — и не обращаться к колонкам через `df.colA`. Сложные условия советует выносить в именованные переменные, если выражений внутри `.filter()` или `F.when()` больше трёх. Цепочки ограничены пятью операторами, а `select` предпочтительнее цепочек `withColumn`.

Отдельный раздел про joins: всегда указывать `how=`, левые соединения вместо правых, `.alias()` на весь DataFrame вместо переименования колонок по одной. Мелкие таблицы-справочники правило советует оборачивать в `F.broadcast()`. Учтите: текст обрезан на разделе о joins, дальше про window functions, map-операции и Iceberg в нём ничего нет.

Правило подключается как файл `.cursor/rules/pyspark-etl-best-practices-cursorrules-prompt-file.mdc` в проекте Cursor.

## Установка

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

**Вручную: положить файлы**
- Файл: `.cursor/rules/pyspark-etl-best-practices-cursorrules-prompt-file.mdc` — Во frontmatter: description, globs, alwaysApply

### Claude Code

**Вручную: положить файлы**
- Файл: `.claude/rules/pyspark-etl-best-practices-cursorrules-prompt-file.md` — Поле paths во frontmatter ограничивает файлы: globs из источника → paths

### Codex

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

### GitHub Copilot

**Вручную: положить файлы**
- Файл: `.github/instructions/pyspark-etl-best-practices-cursorrules-prompt-file.instructions.md` — Поле applyTo задаёт, к каким файлам применять: globs из источника → applyTo

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/rules/pyspark-etl-best-practices-cursorrules-prompt-file.md`

### Cline

**Вручную: положить файлы**
- Файл: `.clinerules/pyspark-etl-best-practices-cursorrules-prompt-file.md`

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/PatrickJS/awesome-cursorrules/tree/HEAD/rules/pyspark-etl-best-practices-cursorrules-prompt-file.mdc

## Когда брать
- задать единый стиль PySpark-кода в команде
- убрать обращение к колонкам через `df.colA`, которое ломается после joins
- разнести ETL-логику на именованные шаги вместо одной длинной цепочки
- сделать конфиг тестируемым без разбора `sys.argv`
- ускорить соединение факта с маленькой таблицей-справочником

## Примеры запросов агенту
- напиши ETL-класс на PySpark по правилам проекта
- перепиши эту цепочку withColumn на один select
- добавь join с таблицей стран, how укажи явно

## Похожие
- [spark-engineer](https://affpapa.org/nevibecode/skills/spark-engineer.md) — скилл · 3800 установок
- [senior-data-engineer](https://affpapa.org/nevibecode/skills/senior-data-engineer.md) — скилл · 1109 установок
- [spark-optimization](https://affpapa.org/nevibecode/skills/spark-optimization.md) — скилл · 10700 установок
- [etl-connector-strategy](https://affpapa.org/nevibecode/skills/etl-connector-strategy.md) — скилл · 8000 установок
- [ETL Pipeline](https://affpapa.org/nevibecode/skills/etl-pipeline.md) — скилл · 4800 установок
- [harvard-artifacts-collection-etl-analytics](https://affpapa.org/nevibecode/skills/harvard-artifacts-collection-etl-analytics.md) — скилл · 1900 установок

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

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

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