2
respostas

Erro na task 2 da DAG

Estou tentando rodar a DAG porém está dando um error na task de 'extrai_dados'

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Meu código da DAG é exatamente igual ao disponível na aula porém alterando os diretórios e a chave da API.

from airflow import DAG
import pendulum
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator
from airflow.macros import ds_add
from os.path import join
import pandas as pd

with DAG(
        "dados_climaticos",
        start_date=pendulum.datetime(2022, 8, 22, tz="UTC"),
        schedule_interval='0 0 * * 1', # executar toda segunda feira
    ) as dag:

    tarefa_1 = BashOperator(
        task_id = 'cria_pasta',
        bash_command = 'mkdir -p "/home/rafaelgallonb/Documents/airflowalura/semana={{data_interval_end.strftime("%Y-%m-%d")}}"'
    )

    def extrai_dados(data_interval_end):
        city = 'Boston'
        key = 'RFX5K3WHZVZ8M9SMCTE7JMJ3F'

        URL = join('https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/',
        f'{city}/{data_interval_end}/{ds_add(data_interval_end, 7)}?unitGroup=metric&include=days&key={key}&contentType=csv')

        dados = pd.read_csv(URL)

        file_path = f'home/rafaelgallonb/Documents/airflowalura/semana={data_interval_end}/'

        dados.to_csv(file_path + 'dados_brutos.csv')
        dados[['datetime', 'tempmin', 'temp', 'tempmax']].to_csv(file_path + 'temperaturas.csv')
        dados[['datetime', 'description', 'icon']].to_csv(file_path + 'condicoes.csv')

    tarefa_2 = PythonOperator(
        task_id = 'extrai_dados',
        python_callable = extrai_dados,
        op_kwargs = {'data_interval_end': '{{data_interval_end.strftime("%Y-%m-%d")}}'}
    )
2 respostas

Só pra complementar. Aqui está a imagem mostrando que as pastas estão sendo criadas.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oii, Rafael! Tudo bem?

Obrigada por disponibilizar o código e o print das pastas!

Pelo o seu código pude identificar um pequeno erro de sintaxe em file_path, está faltando uma barra no início do caminho que você adicionou.

Dito isso, o seu código ficará assim:

dados = pd.read_csv(URL)

        file_path = f'/home/rafaelgallonb/Documents/airflowalura/semana={data_interval_end}/'

#continuação do código

Recomendo que faça alteração e, em seguida, veja se o código comporta como esperado.

Espero ter ajudado. Continue se dedicando aos estudos, você está indo muito bem!

Qualquer dúvida, compartilhe no fórum!

Bons estudos, Rafael!