【发布时间】:2021-02-22 10:12:12
【问题描述】:
我正在尝试将 csv 文件的内容复制到 postgres 数据库中,在两个任务中,第一个任务下载 csv 文件并将其保存在 /temp 文件夹中,另一个是将元素复制到的 postgres 任务数据库。但是,当尝试将文件保存到 dag 文件夹之外时,任务无法保存文件并出现 filenotfound 错误。
保存文件的可调用函数:
def get_events(country_code,start_date, max_days = 365):
AIRFLOW_HOME = os.getenv('AIRFLOW_HOME')
iterate_date = start_date
has_events = False
for i in range(0, max_days):
try:
results = get_event_perday_bycountry(start_date, country_code)
print(iterate_date)
if not results.empty:
results.to_csv('/mnt/c/Users/heyas/project/STOCK/temp/data.csv' ,index = False, mode = "a", header = False)
has_events = True
except ValueError as err:
print(err)
iterate_date -= timedelta(days=1)
if has_events:
print("events Pulled")
else:
print("No events obtained.")
我之前使用 AIRFLOW_HOME 变量将文件保存在 dag 文件夹中,但我的 postgres 无法从那里复制 csv 文件的内容。
AIRFLOW+ Postgres 的 docker-compose 文件:
version: '3.7'
services:
postgres:
image: postgres:9.6
environment:
- POSTGRES_USER=airflow
- POSTGRES_PASSWORD=airflow
- POSTGRES_DB=airflow
logging:
options:
max-size: 10m
max-file: "3"
volumes:
- ./setup/raw_input_data:/data
- ./temp:/temp
ports:
- "5432:5432"
webserver:
image: puckel/docker-airflow:1.10.9
restart: always
depends_on:
- postgres
environment:
- LOAD_EX=n
- EXECUTOR=Local
- AIRFLOW_CONN_POSTGRES_DEFAULT=postgres://airflow:airflow@postgres:5432/airflow
- FERNET_KEY=46BKJoQYlPPOexq0OhDZnIlNepKFf87WFwLbfzqDDho=
logging:
options:
max-size: 10m
max-file: "3"
volumes:
- ./dags:/usr/local/airflow/dags
- ./temp:/temp
# - ./plugins:/usr/local/airflow/plugins
ports:
- "8080:8080"
command: webserver
healthcheck:
test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
interval: 30s
timeout: 30s
retries: 3
我试图通过将文件直接保存在我的目录 /temp 文件夹中来解决它:
├── Postgre
├── __pycache__
├── dags
│ ├── __pycache__
│ ├── data
│ ├── gdelt
│ │ └── __pycache__
│ ├── gdelt-0.1.10.dist-info
│ └── scripts
├── setup
│ ├── raw_input_data
│ └── temp
└── temp
如何将文件保存在 temp 文件夹中,或者在我的目录中放置 Postgres 和 AIRFLOW 之间的公用文件夹?
【问题讨论】:
标签: python postgresql docker airflow