将Python文件转换为DAG

将Python文件转换为DAG,python,airflow,Python,Airflow,我有一个Python文件: class Get: def __init__(self, i): self.i = get_date(i) self.df = self.get_file() def get_file(self): try: ... return df except Exception as e: return ...

我有一个Python文件:

class Get:

    def __init__(self, i):
        self.i = get_date(i)
        self.df = self.get_file()

    def get_file(self):
        try:
            ...
            return df
        except Exception as e:
            return ...

    def get_date(self,i):
        dt = datetime.now() - timedelta(days=i)
        return dt.strftime("%Y-%m-%d")

    def put(self,df):
        ....


class Fix:
    def __init__(self,df):
        ....

if __name__ == '__main__':
    for i in range(4, 0, -1):
        get = Get(i)
        fix = Fix(get.df)
        get.put(fix.df)
基本上,这段代码生成4个最后日期,并在这些日期上运行函数(更新统计信息等)

我想将每个函数转换成PythonOperator,然后对其进行调度,但我认为这样做行不通。我不知道如何转换在它们之间传输的类和参数

如果我在2018年6月12日运行该代码,则代码将执行此操作,并且低于气流应执行的操作:


是否有我可以使用的模板或如何使用的建议?

您可以使用BashOperator执行脚本,而无需对脚本进行任何更改:

dag = DAG('{NAME_OF_THE_DAG}', schedule_interval='daily', 
default_args=default_args)

t1 = BashOperator(
    task_id = '{NAME_OF_TASK}',
    dag = dag,
    bash_command = python {NAME_OF_THE_FILE_TO_EXECUTE}.py')
def main():
    for i in range(4, 0, -1):
    get = Get(i)
    fix = Fix(get.df)
    get.put(fix.df)
或使用PythonOperator:

  • 更新代码以在脚本中创建主函数:

    dag = DAG('{NAME_OF_THE_DAG}', schedule_interval='daily', 
    default_args=default_args)
    
    t1 = BashOperator(
        task_id = '{NAME_OF_TASK}',
        dag = dag,
        bash_command = python {NAME_OF_THE_FILE_TO_EXECUTE}.py')
    
    def main():
        for i in range(4, 0, -1):
        get = Get(i)
        fix = Fix(get.df)
        get.put(fix.df)
    
  • 定义并执行dag:

    dag = DAG('{NAME_OF_THE_TASK}', schedule_interval = 'daily', 
    default_args=default_args)
    
    t1 = PythonOperator(
        task_id = '{NAME_OF_TASK}',
        dag = dag,
        python_callable = main)
    

  • 您可以使用BashOperator执行脚本,而无需对脚本进行任何更改:

    dag = DAG('{NAME_OF_THE_DAG}', schedule_interval='daily', 
    default_args=default_args)
    
    t1 = BashOperator(
        task_id = '{NAME_OF_TASK}',
        dag = dag,
        bash_command = python {NAME_OF_THE_FILE_TO_EXECUTE}.py')
    
    def main():
        for i in range(4, 0, -1):
        get = Get(i)
        fix = Fix(get.df)
        get.put(fix.df)
    
    或使用PythonOperator:

  • 更新代码以在脚本中创建主函数:

    dag = DAG('{NAME_OF_THE_DAG}', schedule_interval='daily', 
    default_args=default_args)
    
    t1 = BashOperator(
        task_id = '{NAME_OF_TASK}',
        dag = dag,
        bash_command = python {NAME_OF_THE_FILE_TO_EXECUTE}.py')
    
    def main():
        for i in range(4, 0, -1):
        get = Get(i)
        fix = Fix(get.df)
        get.put(fix.df)
    
  • 定义并执行dag:

    dag = DAG('{NAME_OF_THE_TASK}', schedule_interval = 'daily', 
    default_args=default_args)
    
    t1 = PythonOperator(
        task_id = '{NAME_OF_TASK}',
        dag = dag,
        python_callable = main)
    

  • 你试过这个@YashKumarAtri吗?这个解释如何使用python脚本并调用其中的函数。这不是我想要的。我想删除python脚本并将其创建为DAG。我不明白如何转换它。在脚本中我有一个循环。在“气流”中,我不应该有循环,我应该有每个具有不同iI值的运行,建议使用官方教程,因为这里有许多特定的部分需要解释。除此之外,你是对的。Airflow将接管调度,您可以将代码放在DAG中-但您不需要这样做,您可以用与从main调用相同的方式调用。您是否尝试过@YashKumarAtri这个方法?这将解释如何使用python脚本并在其中调用函数。这不是我想要的。我想删除python脚本并将其创建为DAG。我不明白如何转换它。在脚本中我有一个循环。在“气流”中,我不应该有循环,我应该有每个具有不同iI值的运行,建议使用官方教程,因为这里有许多特定的部分需要解释。除此之外,你是对的。气流将接管调度,您可以将代码放入DAG中-但您不需要这样做,您可以使用与从main调用相同的方式调用。