导入错误:云编写器中的Python Dataflow Job

时间:2018-09-06 19:14:55

标签: google-cloud-platform airflow google-cloud-composer

我可以在Cloud Composer中将单个文件作为数据流作业运行,但是当我将其作为包运行时会失败。

pipeline_jobs/
-- __init__.py
-- run.py  (main file)
-- setup.py 
-- data_pipeline/
----- __init__.py
----- tasks.py
----- transform.py
----- util.py

我收到此错误:

WARNING -  File "/tmp/dataflowd232f-run.py", line 14, in <module
{gcp_dataflow_hook.py:120} WARNING - from data_pipeline.tasks import task
WARNING - ImportError: No module named data_pipeline.tasks.

这是dag配置:

from datetime import datetime, timedelta
from airflow import DAG
from airflow.contrib.operators.dataflow_operator import DataFlowPythonOperator

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime.strptime("2017-11-01","%Y-%m-%d"),
    'py_options': [],
    'dataflow_default_options': {
        'start-date': '20171101',
        'end-date': '20171101',
        'project': '<project-id>',
        'region': '<location>',
        'temp_location': 'gs://<bucket>/flow/tmp',
        'staging_location': 'gs://<bucket>/flow/staging',
        'setup_file': 'gs://<bucket>/dags/pipeline_jobs/setup.py',
        'runner': 'DataFlowRunner',
        'job_name': 'job_name_lookup',
        'task-id': 'run_pipeline'
    },
}

dag = DAG(
    dag_id='pipeline_01',
    default_args=default_args,
    max_active_runs=1,
    concurrency =1
)

task_1 = DataFlowPythonOperator(
    py_file = 'gs://<bucket>/dags/pipeline_jobs/run.py',
    gcp_conn_id='google_cloud_default',
    task_id='run_job',
    dag=dag)

我尝试将run.py放入dags文件夹中,但仍然出现相同的错误。 任何类型的建议都会很有帮助。

也尝试这样做:     从pipeline_jobs.data_pipeline.tasks导入任务  但仍然是同样的问题。

1 个答案:

答案 0 :(得分:3)

尝试将整个pipeline_jobs /放在此instruction之后的dags文件夹中,并将数据流py文件引用为:/home/airflow/gcs/dags/pipeline_jobs/run.py。