我正在使用BashOperator在Airflow中解压缩.gz文件。
gzip -d archive_name.csv.gz
因此,gzip命令将原始.gz文件替换为解压缩的archive_name.csv文件
我在Airflow中的任务
gzip_file = BashOperator(
task_id = "gzip_file",
bash_command = "gzip -d archive_name.csv.gz",
dag=dag
)
现在我需要知道Airflow中其他任务的文件名,因此我希望任务gzip_file应该使用xcom推送文件名,以便我的其他任务可以提取文件名并使用它。我该怎么办?
答案 0 :(得分:1)
假设您正在运行最新版本的Ariflow,则可以将do_xcom_push
[1]设置为true,并在您最后一个写入标准输出的命令中回显解压缩的文件,其余部分由气流完成
如果BaseOperator.do_xcom_push为True,则最后一行写入stdout bash命令完成时也将被推送到XCom
然后,下游任务可以使用xcom pull来获取该文件名[2]
[1] https://github.com/apache/airflow/blob/45244e38d386f20838a2cc85fbc72edca843a5e1/airflow/operators/bash_operator.py#L34
[2] https://github.com/apache/airflow/blob/master/airflow/example_dags/example_xcom.py
答案 1 :(得分:0)
BashOperator
具有参数xcom_push
。如果xcom_push为True,则在bash命令完成时,写入stdout的最后一行也将被推送到XCom。
运行bash命令,使最后一行包含未压缩文件的名称。
gzip_file = BashOperator(
task_id = "gzip_file",
bash_command = "gzip -d archive_name.csv.gz | ls archive_name.csv",
xcom_push=True,
dag=dag
)