Dynamic Task Mapping not working with op_kwargs in PythonOperator
See original GitHub issueApache Airflow version
2.3.0 (latest released)
What happened
The following DAG was written and expected to generate 3 tasks (one for each string in the list)
dag_code
import logging
from airflow.decorators import dag, task
from airflow.operators.python import PythonOperator
from airflow.utils.dates import datetime
def log_strings_operator(string, *args, **kwargs):
logging.info("we've made it into the method")
logging.info(f"operator log - {string}")
@dag(
dag_id='dynamic_dag_test',
schedule_interval=None,
start_date=datetime(2021, 1, 1),
catchup=False,
tags=['example', 'dynamic_tasks']
)
def tutorial_taskflow_api_etl():
op2 = (PythonOperator
.partial(task_id="logging_with_operator_task",
python_callable=log_strings_operator)
.expand(op_kwargs=[{"string": "a"}, {"string": "b"}, {"string": "c"}]))
return op2
tutorial_etl_dag = tutorial_taskflow_api_etl()
error message
Broken DAG: [/usr/local/airflow/dags/dynamic_dag_test.py] Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/airflow/serialization/serialized_objects.py", line 343, in _serialize
return SerializedBaseOperator.serialize_mapped_operator(var)
File "/usr/local/lib/python3.9/site-packages/airflow/serialization/serialized_objects.py", line 608, in serialize_mapped_operator
assert op_kwargs[Encoding.TYPE] == DAT.DICT
TypeError: list indices must be integers or slices, not Encoding
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/airflow/serialization/serialized_objects.py", line 1105, in to_dict
json_dict = {"__version": cls.SERIALIZER_VERSION, "dag": cls.serialize_dag(var)}
File "/usr/local/lib/python3.9/site-packages/airflow/serialization/serialized_objects.py", line 1013, in serialize_dag
raise SerializationError(f'Failed to serialize DAG {dag.dag_id!r}: {e}')
airflow.exceptions.SerializationError: Failed to serialize DAG 'dynamic_dag_test': list indices must be integers or slices, not Encoding
What you think should happen instead
Dag should contain 1 task logging_with_operator_task
that contains 3 indices
How to reproduce
copy/paste dag code into a dag file and run on airflow 2.3.0. Airflow UI will flag the error
Operating System
Debian
Versions of Apache Airflow Providers
No response
Deployment
Astronomer
Deployment details
No response
Anything else
No response
Are you willing to submit PR?
- Yes I am willing to submit a PR!
Code of Conduct
- I agree to follow this project’s Code of Conduct
Issue Analytics
- State:
- Created a year ago
- Comments:12 (9 by maintainers)
Top Results From Across the Web
Dynamic Task Mapping — Airflow Documentation
Dynamic Task Mapping allows a way for a workflow to create a number of tasks at runtime based upon current data, rather than...
Read more >Airflow Dynamic Task Mapping - Ronald Widjojo - Medium
Dynamic Task Mapping allows a way for a workflow to create a number of tasks at runtime based upon current data, rather than...
Read more >Using Airflow dynamic task mapping output in a single ...
Adding a PythonOperator between task_two and task_three moving output to a new list solves the problem, but why? ` #Declare task two here....
Read more >Dynamic Task Mapping in Apache Airflow - Marc Lamberti
Dynamic task mapping in Apache Airflow allows to create tasks based on the output of a task. Let's dive into this powerful feature....
Read more >Dynamic Task Mapping - YouTube
Live with Astronomer will dive into the Dynamic Task Mapping feature introduced in Airflow 2.3. We'll show how to easily add dynamic tasks ......
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
Your original syntax is correct. (https://github.com/apache/airflow/issues/23833#issuecomment-1133900501 is wrong.) This looks like a bug in the serialisation code.
@zoid-w Can you add a feedback in #24863? Thanks.