我知道这种问题已经被问过几次了,但我只是没有让我的工作流程按照我想要的方式工作,我是 Python 和气流的新手。
我有两个 dag,一个每周一次,它将数据从 csv 文件加载到 mysql 数据库中,从数据库中获取某些列,准备数据并根据清理过的数据训练 DecisionTreeRegressor 模型,这完全正常。 每日 dag 加载有关要素的数据,并使用此数据使用每周 dag 中创建的模型预测某个值。这是我正在使用的 dag 代码:
import datetime as dt
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.utils.dates import days_ago
from data_handling import load_data, insert_into_db, clean_data
from ml_handling import create_model, predict_prices
default_args = {
'owner': 'me',
'start_date': days_ago(2),
'retries': 1,
'retry_delay': dt.timedelta(minutes=5),
}
with DAG('weekly_etl_dag',
default_args=default_args,
schedule_interval='0 * * *
) as dag:
insert_into_db = PythonOperator(task_id='insert_into_db',
python_callable=insert_into_db)
load_data = PythonOperator(task_id='load_data',
python_callable=load_data)
clean_data = PythonOperator(task_id='clean_data',
python_callable=clean_data)
create_model = PythonOperator(task_id='create_model',
python_callable=create_model)
insert_into_db >> load_data >> clean_data >> create_model
import datetime as dt
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.sensors.external_task import ExternalTaskSensor
from airflow.utils.dates import days_ago
from ml_handling import predict_prices, load_pred_data_daily
# definition of the dag to handle the daily tasks such as loading the feature data for the houses whose prices shall
# be predicted and actually predicting these prices
default_args = {
'owner': 'me',
'start_date': days_ago(2),
'retries': 1,
'retry_delay': dt.timedelta(minutes=5),
}
with DAG('daily_etl_dag',
default_args=default_args,
schedule_interval='0 * * * *',
) as dag:
load_pred_data_daily = PythonOperator(task_id='load_pred_data_daily',
python_callable=load_pred_data_daily)
predict_prices = PythonOperator(task_id='predict_prices',
python_callable=predict_prices)
weekly_dag = ExternalTaskSensor(
task_id='wait_for_the_weekly_dag_to_be_completed',
external_dag_id='weekly_dag',
external_task_id=None,
timeout=10,
allowed_states=['success'],
failed_states=['failed', 'running'],
mode="reschedule",
check_existence=True
)
weekly_dag >> [load_pred_data_daily >> predict_prices]
如前所述,每周 dag 有效,并且两个 dag 中的 PythonOperators 都可以正常工作,通过将所有这些都放在一个 dag 中进行测试。 我正在尝试使用 ExternalTaskSensor 实现每周和每日 dag 之间的依赖关系,但我不确定如何测试我已经编写的代码。我希望在本周的每周 dag 成功完成后开始每日 dag。
我做错了什么,如何在气流中测试我的代码?
感谢您的帮助!