Pyspark 将变量从火花推至气流
我有一个变量,我想把它的值推送到气流,这样我就可以把它作为下一个任务的输入。我知道我必须使用XCOM,但我还没有弄清楚如何从火花任务推进到气流Pyspark 将变量从火花推至气流,pyspark,airflow,apache-airflow-xcom,Pyspark,Airflow,Apache Airflow Xcom,我有一个变量,我想把它的值推送到气流,这样我就可以把它作为下一个任务的输入。我知道我必须使用XCOM,但我还没有弄清楚如何从火花任务推进到气流 def c_count(): return spark_task( name='c_count', script='c_count.py', dag=dag, table=None, host=Variable.get('host'), trigger
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
问题是我得到的是气流日志的最后一次打印。是否有任何方法可以从spark脚本中获取特定值?谢谢大家! 您无法使火花和气流直接通信。您必须在两者之间使用Python。您需要的值,并使用XCOM将其推送到气流 您无法使火花和气流直接通信。您必须在两者之间使用Python。您需要的值,并使用XCOM将其推送到气流 您必须在此处提供更多信息:“spark_任务”映射到哪个气流操作员。另外,Airflow使用哪个执行器?您可以将Airflow任务之间的数据持久化到诸如redis cache之类的键/值存储中。从RDD收集spark驱动程序中的数据并存储到redis store中。内部气流DAG连接到redis store并获取存储的参数。在气流中的下一个所需任务中使用它。另一方面,如果您的airflow服务器在您提交spark驱动程序的同一节点上运行,则您可以在收集后写入文件,并在下一个airflow任务中再次读取文件。您必须在此处提供更多信息:“spark_任务”映射到哪个airflow操作员。另外,Airflow使用哪个执行器?您可以将Airflow任务之间的数据持久化到诸如redis cache之类的键/值存储中。从RDD收集spark驱动程序中的数据并存储到redis store中。内部气流DAG连接到redis store并获取存储的参数。在气流中的下一个所需任务中使用它。另一方面,如果您的airflow服务器运行在您提交spark驱动程序的同一个节点上,那么您只需在收集后写入文件,然后在下一个airflow任务中再次读取该文件,这正是我所担心的!谢谢大家!@MichaelGerm您的主要问题是您将pyspark与bash命令一起使用。Airflow是python中的,因此您应该包括spark包,并使用python操作符使pyspark代码直接在Airflow中运行。这将更容易传输任何想要的数据。正是我所害怕的!谢谢大家!@MichaelGerm您的主要问题是您将pyspark与bash命令一起使用。Airflow是python中的,因此您应该包括spark包,并使用python操作符使pyspark代码直接在Airflow中运行。这样更容易传输任何想要的数据。