首页 > 解决方案 > 应该在哪里放置 python 脚本以从 Airflow dag 运行它?

问题描述

我正在尝试在 Airflow 中运行一个简单的 dag 来执行 python 文件,它抛出错误无法打开文件'/User/....'。

下面是我正在使用的脚本。

from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator
from datetime import datetime,timedelta

default_args = {
   'owner': 'airflow',
   'start_date': datetime(2021,3,2),
   'depends_on_past': False,
   'retries': 0
}

dag=DAG(dag_id='DummyDag',default_args=default_args,catchup=False,schedule_interval='@once')

command_load='python /usr/local/airflow/dags/dummy.py '

#load=BashOperator(task_id='loadfile',bash_command='python /Users/<user-id>/MyDrive/DataEngineeringAssignment/dummydata.py',dag=dag)


start=DummyOperator(task_id='Start',dag=dag)
end=DummyOperator(task_id='End',dag=dag)

dir >> start >> end

我有什么地方出错了吗?

标签: pythonairflow

解决方案


选项1:

文件位置 ( dummydata.py) 相对于包含管道文件(DAG 文件)的目录。

dag=DAG(
    dag_id='DummyDag',
    ...
)

load=BashOperator(task_id='loadfile',
                  bash_command='python dummydata.py',
                  dag=dag
                  )

选项 2: 将您的 template_searchpath 定义为指向 DAG 构造函数调用中的任何文件夹位置。

dag=DAG(
    dag_id='DummyDag',
    ...,
    template_searchpath=['/Users/<user-id>/MyDrive/DataEngineeringAssignment/']
)

load=BashOperator(task_id='loadfile',
                  # "dummydata.py" is a file under "/Users/<user-id>/MyDrive/DataEngineeringAssignment/"
                  bash_command='python dummydata.py ', # Note: Space is important!
                  dag=dag
                  )

有关更多信息,您可以在文档中阅读


推荐阅读