You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Airflow中xcom_pull报'task_id'参数错误的问题与解决

问题:Airflow中process_user任务报错TypeError: xcom_pull() got an unexpected keyword argument 'task_id'

我正在学习Marc Lamberti的Apache Airflow课程,在名为process_user的任务中遇到问题,相关代码如下:

def _process_user(ti):
    user = ti.xcom_pull(task_id = "extract_user")
    user = user['results'][0]
    processed_user =  json_normalize({
        'first_name': user['name']['first'],
        'last_name': user['name']['last'],
        'country': user['location']['country'],
        'username': user['login']['username'],
        'password': user['login']['password'],
        'email': user['email']})
    processed_user.to_csv('/tmp/processed_user.csv', index=None, header=False)

...

with DAG(dag_id='user_processing',
        start_date=datetime(2022, 1, 1),
        schedule_interval='@daily',
        catchup=False) as dag:

    ...

    extract_user = SimpleHttpOperator(
        task_id='extract_user',
        http_conn_id='user_api',
        endpoint='api/',
        method='GET',
        response_filter = lambda response: 
        json.loads(response.text),
        log_response = True
    )

    process_user = PythonOperator(
        task_id='process_user',
        python_callable = _process_user
    )

    ...

运行后持续报错:

TypeError: xcom_pull() got an unexpected keyword argument 'task_id'

错误原因

两个关键点导致报错:

  1. xcom_pull方法的参数名称是**task_ids(复数形式)**,而非代码中使用的task_id(单数),属于参数名拼写错误。
  2. 直接在函数参数中声明ti的写法,在部分Airflow版本中需要配合PythonOperator设置provide_context=True才能正常传递上下文对象;改用**kwargs接收上下文是更通用且稳妥的方式。

解决方案

修改_process_user函数的定义,通过**kwargs获取上下文对象,同时修正xcom_pull的参数名:

def _process_user(**kwargs):
    user = kwargs['ti'].xcom_pull(task_ids="extract_user")
    # 后续处理逻辑保持不变
    user = user['results'][0]
    processed_user =  json_normalize({
        'first_name': user['name']['first'],
        'last_name': user['name']['last'],
        'country': user['location']['country'],
        'username': user['login']['username'],
        'password': user['login']['password'],
        'email': user['email']})
    processed_user.to_csv('/tmp/processed_user.csv', index=None, header=False)

内容的提问来源于stack exchange,提问作者Umid Umaraliev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:43:24