将变量从Spark推送到气流

时间:2019-12-05 08:25:06

标签: pyspark airflow apache-airflow-xcom

我有一个变量,希望将其值推送到Airflow,以便将其用作下一个任务的输入。我知道我必须使用xcoms,但我还没有弄清楚如何从spark任务推向Airflow

def c_count():
    return spark_task(
        name='c_count',
        script='c_count.py',
        dag=dag,
        table=None,
        host=Variable.get('host'),
        trigger_rule="all_done",
        provide_context=True,
        xcom_push = True
    )





 def c_int():
        return spark_task(
            name='c_in',
            script='another_test.py',
            dag=dag,
            table=None,
            host=Variable.get('host'),
            trigger_rule="all_done",
            counts="{{ task_instance.xcom_pull(task_ids='c_count') }}"
        )

编辑: Spark任务如下:

def spark_task_sapbw(name, script, dag, table, host, **kwargs):

    spark_cmd = 'spark-submit'

    if Variable.get('spark_master_uri', None):
        spark_cmd += ' --master {}'.format(Variable.get('spark_master_uri'))
.
.
.


    task = BashOperator(
        task_id=name,
        bash_command=spark_cmd,
        dag=dag,
        **kwargs
    )
    return task

问题是我得到的是Airflow日志的最后打印。有什么方法可以从spark脚本中获取特定值?谢谢!

1 个答案:

答案 0 :(得分:1)

您不能直接使火花与气流连通。您必须在两者之间使用Python。 collect所需的值,并通过XComs推动它们。