一連のPythonタスクをpython files:file1.py、file2.py、...
Airflowのドキュメントを読みましたが、DAGのpythonファイルのフォルダーとファイル名を指定する方法がわかりませんか?
これらのpythonファイル(Python function through Python Operator)ではなく)を実行したいと思います。
タスク1:file1.pyを実行します(インポートパッケージを使用)
Task2:file2.pyを実行します(他のインポートパッケージを使用)
役に立つでしょう。ありがとうございます。それでは、お元気で
BashOperator
を使用して、pythonファイル全体を実行するには(liferacerの答えのように):
from airflow.operators.bash_operator import BashOperator
bash_task = BashOperator(
task_id='bash_task',
bash_command='python file1.py',
dag=dag
)
次に、PythonOperator
を使用してそれを行うには、main
関数を呼び出します。既に__main__
ブロックがあるはずなので、そこで発生することをmain
関数に入れて、file1.py
が次のようになるようにします。
def main():
"""This gets executed if `python file1` gets called."""
# my code
if __name__ == '__main__':
main()
次に、DAGの定義:
from airflow.operators.python_operator import PythonOperator
import file1
python_task = PythonOperator(
task_id='python_task',
python_callable=file1.main,
dag=dag
)
「pythonファイルを実行したい(Python function through Pythonオペレータ)。」
想定:
dags/
my_dag_for_task_1_and_2.py
tasks/
file1.py
file2.py
PythonOperator
を回避するためのリクエスト:
# my_dag_for_task_1_and_2.py
import datetime as dt
from airflow import DAG
from airflow.operators import BashOperator
with DAG(
'my_dag_for_task_1_and_2',
default_args={
'owner': 'me',
'start_date': datetime(…),
…,
},
schedule_interval='8 * * * *',
) as dag:
task_1 = BashOperator(
task_id='task_1',
bash_command='/path/to/python /path/to/dags/tasks/file1.py',
)
task_2 = BashOperator(
task_id='task_2',
bash_command='/path/to/python /path/to/dags/tasks/file2.py',
)
task_1 >> task_2
あなたはPythonをAirflowのためにゼロから書きませんでしたが、PythonOperator
を使って:
# my_dag_for_task_1_and_2.py
import datetime as dt
from airflow import DAG
from airflow.operators import PythonOperator
import tasks.file1
import tasks.file2
with DAG(
'my_dag_for_task_1_and_2',
default_args={
'owner': 'me',
'start_date': datetime(…),
…,
},
schedule_interval='8 * * * *',
) as dag:
task_1 = PythonOperator(
task_id='task_1',
python_callable=file1.function_in_file1,
)
task_2 = PythonOperator(
task_id='task_2',
python_callable=file2.function_in_file2, # maybe main?
)
task_1 >> task_2
BashOperatorを使用して、タスクとしてpythonファイルを実行できます
from airflow import DAG
from airflow.operators import BashOperator,PythonOperator
from datetime import datetime, timedelta
seven_days_ago = datetime.combine(datetime.today() - timedelta(7),
datetime.min.time())
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': seven_days_ago,
'email': ['[email protected]'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
)
dag = DAG('simple', default_args=default_args)
t1 = BashOperator(
task_id='testairflow',
bash_command='python /home/airflow/airflow/dags/scripts/file1.py',
dag=dag)