A worker actually executes tasks.
Scheduler decides → Worker runs the Python/Bash/Spark-submit task
In distributed setups, workers talk through the executor plumbing (for example a Celery broker/backend). Keep heavy compute off Airflow when you can: submit to Spark/dbt/warehouse and let Airflow orchestrate.