如何从airflow中的Python操作符返回列表,并将其用作DAG中后续任务的参数

如何从airflow中的Python操作符返回列表,并将其用作DAG中后续任务的参数,python,apache,airflow,Python,Apache,Airflow,我有3个任务要在相同的DAG中运行。而Task1返回字典task2和task3的列表时,尝试使用结果return by中的一个dictionary元素 任务1 您可以使用,因为它们是为任务间通信而设计的。如果您的字典非常大,那么我建议将其存储为csv文件。 通常,Airflow中的任务不会在它们之间共享数据,因此XCom是实现这些任务的一种方法,但仅限于少量数据。您应该使用XCom在不同任务之间传递变量/消息。请看一个例子: 对于您的情况,应该类似于以下内容: 默认参数={ “所有者”:“气流”

我有3个任务要在相同的DAG中运行。而Task1返回字典task2和task3的列表时,尝试使用结果return by中的一个dictionary元素 任务1

您可以使用,因为它们是为任务间通信而设计的。如果您的字典非常大,那么我建议将其存储为csv文件。
通常,Airflow中的任务不会在它们之间共享数据,因此XCom是实现这些任务的一种方法,但仅限于少量数据。

您应该使用XCom在不同任务之间传递变量/消息。请看一个例子:

对于您的情况,应该类似于以下内容:

默认参数={
“所有者”:“气流”,
“开始日期”:气流.utils.dates.days(2),
“提供上下文”:True,#这是必需的
}
def get_list():
....
退换货清单
def parse_1(**kwargs):
ti=kwargs['ti']
#获取信息列表
v1=ti.xcom\u pull(key=None,task\u id='get\u list')
#现在,您可以将此v1字典用作普通python dict
...
def parse_2(**kwargs):
ti=kwargs['ti']
#获取信息列表
v1=ti.xcom\u pull(key=None,task\u id='get\u list')
...
dag=dag('dag示例',默认参数=默认参数)
数据列表=蟒蛇算子(
task_id='get_List',
python\u callable=get\u list,
dag=dag)
对于get_list()中的数据:
sub_task1=蟒蛇操作员(
task_id='data_parse1'+data['id'],
python_callable=parse_1,
op_kwargs={'dataObject':data},
dag=dag,
)
sub_task2=蟒蛇操作员(
task_id='data_parse2'+data['id'],
python_callable=parse_2,
op_kwargs={'dataObject':data},
dag=dag,
)

如果我尝试这样的操作,就会抛出一个错误:“Breaked DAG:[my\u DAG.py]“PythonOperator”对象不可编辑”``引用数据列表我认为您无法执行这段代码:
data\u list=PythonOperator(task\u id='get\u list',python\u callable=get\u list,DAG=DAG)对于数据列表中的数据:
这是错误:“PythonOperator”对象不可编辑解析可能会出错。在
数据列表
定义和
for循环
def get_list():
    ....
    return listOfDict

def parse_1(example_dict):
    ...

def parse_2(example_dict):
    ...

dag = DAG('dagexample', default_args=default_args)
data_list = PythonOperator(
task_id='get_lists',
python_callable=get_list,
dag=dag)
for data in data_list:
    sub_task1 = PythonOperator(
        task_id='data_parse1' + data['id'],
        python_callable=parse_1,
        op_kwargs={'dataObject': data},
        dag=dag,
     )
    sub_task2 = PythonOperator(
        task_id='data_parse2' + data['id'],
        python_callable=parse_2,
        op_kwargs={'dataObject': data},
        dag=dag,
     )