Learning Platform
Глоссарий Troubleshooting
Урок 08.01 · 10 мин
Продвинутый
Dynamic MappingAIP-42expandScaling

Dynamic Task Mapping — обзор модуля

Dynamic Task Mapping (AIP-42, 2.3+) — runtime expansion task в N параллельных копий на основе upstream result. Это pandas.apply для Airflow. Концептуально просто, но имеет важные scaling implications.

Уроки модуля

#УрокЧто внутри
01Обзор модуляТекущий урок
02expand() — основыprocess.expand(filename=get_files()), cartesian product
03expand_kwargs / zip / partialList of dicts, parallel zip, partial + dynamic
04Mapped tasks runtimeКак scheduler runtime expands, что хранится в БД
05Scaling pitfalls1000 mapped tasks = scheduler load, max_map_length
06Real-world patternsS3 prefix processing, DB shards, multi-region (см. lesson 06)

Ключевые концепты

@task
def get_files() -> list[str]:
    return ["a.csv", "b.csv", "c.csv"]

@task
def process(filename: str):
    pass

process.expand(filename=get_files())   # 3 mapped TI

Варианты:

  • .expand(arg=iterable) — cartesian product если несколько args
  • .expand_kwargs([{...}, {...}]) — list of dicts
  • .zip(a, b) — parallel zip
  • .partial(const=...).expand(...) — constant + dynamic

Scaling pitfalls

Лимит: max_map_length = 1024 по умолчанию. Можно поднять, но осторожно:

  • 1000 mapped tasks = 1000 строк в task_instance + 1000 xcom records
  • Scheduler load → critical section longer
  • UI становится медленным

Mitigation:

  • max_active_tis_per_dag ограничивает одновременно running
  • Batch processing — внутри одного task обработать N items, не N task

Killer takeaway

Dynamic Task Mapping — не silver bullet для parallelism. Если можете batch внутри одного task (например, обработать 100 файлов в одном Python task), это в 100 раз эффективнее, чем 100 mapped tasks. Используйте mapping когда нужна изолированная retry каждого item.

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 6