Przejdź do treści
Biblioteka skilli
Dane i analityka · Analiza

optimizing-pyspark-jobs

/optimizing-pyspark-jobs

Optymalizuje wolne lub zawodzące zadania PySpark i Spark SQL: partycjonowanie, skosy danych, shuffle, broadcast join, cache, Adaptive Query Execution oraz unikanie driver collect i UDF w Pythonie.

Licencja
Apache-2.0
Ostatnia zmiana repozytorium
30.08.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
1
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 30.08.2026, bez odwołań do wycofanych modeli i API.

Licencja

Apache-2.0, otwarta: można używać i zmieniać, z zachowaniem licencji i informacji o zmianach.

Co robi i kiedy

Optymalizuje wolne lub zawodzące zadania PySpark i Spark SQL: partycjonowanie, skosy danych, shuffle, broadcast join, cache, Adaptive Query Execution oraz unikanie driver collect i UDF w Pythonie.

Oryginalny opis (EN)

Optimize slow or failing PySpark and Spark SQL jobs — partitioning and repartitioning, data skew, shuffles, broadcast joins, caching, Adaptive Query Execution, and avoiding driver collects and Python UDFs. Use when a Spark job is slow, spills, OOMs, has skewed tasks, runs a huge shuffle, or a stage hangs on a few straggler tasks.

Jak działa

  1. When to use
  2. Workflow
  3. Patterns
  4. Common pitfalls
Sekcje z nagłówków SKILL.md, w oryginale · 78 linii, 427 słów
Podgląd SKILL.md
---
name: optimizing-pyspark-jobs
description: Optimize slow or failing PySpark and Spark SQL jobs — partitioning and repartitioning, data skew, shuffles, broadcast joins, caching, Adaptive Query Execution, and avoiding driver collects and Python UDFs. Use when a Spark job is slow, spills, OOMs, has skewed tasks, runs a huge shuffle, or a stage hangs on a few straggler tasks.
---

# Optimizing PySpark Jobs

## When to use

- A Spark/PySpark job is slow, spills to disk, or OOMs (driver or executor).
- One or a few tasks straggle while the rest finish (skew).
- Huge shuffles, wide stages, or exploding output.
- Do NOT use for pure SQL warehouse tuning (use `optimizing-sql-queries`).

## Workflow

```
- [ ] Read the Spark UI: find the slow stage and its shuffle/skew
- [ ] Confirm the cause: skew, too many/few partitions, wide shuffle, or driver pull
- [ ] Fix joins (broadcast small side; salt skewed keys)
- [ ] Right-size partitions; enable AQE
- [ ] Re-run and compare stage time/shuffle bytes
```

1. **Read the Spark UI** (Stages/SQL tab). Find the stage dominating wall-clock;
   look at shuffle read/write and the task-duration distribution (a long tail =
   skew).
2. **Diagnose** the dominant cause before changing config.
3. **Fix joins first** — broadcast the small side; handle skewed keys.
4. **Right-size partitions** and let Adaptive Query Execution coalesce them.
5. **Re-measure** in the UI; confirm shuffle bytes / stage time dropped.

## Patterns

**Broadcast the small side** to avoid a shuffle join:

```python
from pyspark.sql.functions import broadcast
fact.join(broadcast(small_dim), "dim_id")
```

**Enable Adaptive Query Execution** (coalesces partitions, converts to broadcast,
handles skew automatically):

```python
spark.conf.set("spark.sql.adaptive.enabled", "true")
spark.conf.set("spark.sql.adaptive.skewJoin.enabled", "true")
```

**Salt a skewed join key** when one key value dominates (AQE off or extreme skew):
add a random suffix to the hot key on both sides so it spreads across tasks.

**Right-size partitions** — aim for ~128MB per partition. Use `repartition(n)` to
increase parallelism before a wide operation; use `coalesce(n)` to reduce small
output files without a shuffle.

**Cache only reused DataFrames**, and unpersist when done:

```python
df.cache(); df.count()   # materialize once if used multiple times
...
df.unpersist()
```

## Common pitfalls

- **`collect()` / `toPandas()` on large data** — pulls everything to the driver
  and OOMs it. Aggregate first, or write to storage.
- **Python UDFs in hot paths** — serialize row-by-row; use built-in/SQL functions,
  or pandas/vectorized UDFs when unavoidable.
- **Default 200 shuffle partitions** on big or tiny data — too few causes spills,
  too many causes overhead; enable AQE or set
  `spark.sql.shuffle.partitions` to fit the data.
- **`repartition()` when `coalesce()` suffices** — `repartition` forces a full
  shuffle; use `coalesce` to only shrink partition count.
- **Ignoring skew** — a few straggler tasks dominate runtime; salt or use AQE
  skew join.
- **Caching everything** — wastes memory and forces eviction; cache only reused
  frames.
- **Many small output files** — `coalesce` before write or use adaptive
  file sizing.

Wersje

W bazie nie ma innych skilli o nazwie optimizing-pyspark-jobs.

Migawka bazy z 28.10.2026 · wersja paczki 874f16065529 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100spark-jobs
    Pisze i stroi zadania PySpark: strategia joinów i limity broadcastu, rozmiar partycji shuffle, diagnoza skośności i salting, unikanie UDF, cache i układ plików wyjściowych, z konkretnymi progami.
  • 100spark-optimization
    Optymalizuje zadania Apache Spark przez partycjonowanie, cache, shuffle i pamięć, gdy zadania działają wolno.
  • 100spark
    Pomaga budować rozproszone pipeline'y danych w Apache Spark: partycjonowanie, shuffle, skośność, joiny, cache i czytanie Spark UI, by znaleźć przyczynę powolnego zadania.
  • 100spark-optimization
    Optymalizuje zadania Apache Spark przez partycjonowanie, cache, optymalizację shuffle i strojenie pamięci, przy poprawie wydajności, diagnozie wolnych jobów i skalowaniu przetwarzania danych.
  • 100spark-optimization
    Optymalizuje zadania Apache Spark przez partycjonowanie, cache, optymalizację shuffle i strojenie pamięci, przy poprawie wydajności, diagnozie wolnych jobów i skalowaniu przetwarzania danych.
  • 100spark-optimization
    Optymalizuje zadania Apache Spark przez partycjonowanie, cache, optymalizację shuffle i strojenie pamięci, przy poprawie wydajności, diagnozie wolnych jobów i skalowaniu przetwarzania danych.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.