Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >气流中通过xcom的参考文件名

气流中通过xcom的参考文件名
EN

Stack Overflow用户
提问于 2020-01-19 07:36:05
回答 1查看 1.3K关注 0票数 1

我试图了解如何通过airflow xcom功能传递值。我试图构建的具体用途是编写一个文件,然后移动它,然后运行另一个命令。我的想法是将文件名从一个操作符传递到下一个操作符。

以下是我所拥有的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from airflow.models import DAG
from airflow.operators.python_operator import PythonOperator
import datetime as dt

DAG = DAG(
  dag_id='xcom_test_dag',
  start_date=dt.datetime.now(),
  schedule_interval='@once'
)

def push_function(**context):
    file_name = 'test_file_{date}'.format(date=dt.datetime.now())
    return context['task_instance'].xcom_push(key='filename', value=file_name)

def pull_function(**context):
    dir(context['task_instance'].xcom_pull())

push_task = PythonOperator(
    task_id='push_task', 
    python_callable=push_function,
    provide_context=True,
    dag=DAG)

pull_task = PythonOperator(
    task_id='pull_task', 
    python_callable=pull_function,
    provide_context=True,
    dag=DAG)

push_task >> pull_task

如果我想在pull_task中引用文件名,这样就可以读取该文件--我应该如何调用该文件?尝试访问context['task_instance']不包含值。此外-尝试并引用这样的文件名从一个任务到另一个任务/操作符到操作符是最好的实践吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-19 15:37:48

从XCOM提取数据时,需要提供推送数据的任务的任务ID。在您的示例中,push任务的task_id是push_task,因此您需要执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
value = context['task_instance'].xcom_pull(task_ids='push_task')

然而,从气流文件中可以注意到:

默认情况下,xcom_pull()筛选那些在从execute函数返回时自动分配给XComs的键(与手动推送的XComs相反)。

如果要使用特定的键手动将数据推送到XCOM,则在调用xcom_pull时可能需要包含该键。在您的示例中,您在推送任务中按下一个名为filename的键,因此您可能需要在拉任务中执行如下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
value = context['task_instance'].xcom_pull(task_ids='push_task', key='filename')

这些信息在气流文档中有更详细的介绍:https://airflow.apache.org/docs/stable/concepts.html?highlight=xcom#concepts-xcom

至于您关于“最佳实践”的问题--对于气流任务/操作员之间的通信,XCOM是最好的方法。但是,如果希望跨多个操作符从磁盘读取文件,则需要确保所有工作人员都可以访问文件的存储位置。如果这是不可能的,另一种选择是让push任务存储该文件(例如,在AWS S3中)并将S3 URL推送到XCOM。然后,拉任务可以从XCOM读取S3 URL,并从S3下载该文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59811587

复制
相关文章
jsp中的类似 if - else 语句 的语法
<c:choose>    <c:when test="${requestScope.newFlag== '1' || requestScope.newFlag== '2' ||requestScope.newFlag== '3'}">            作品名称: ${star.class_}<br />          作品编号: ${star.raceNum}<br />           </c:when>    <c:otherwise>       班级: ${star.class_}<
用户1220053
2018/02/09
1.5K0
搭建类似pytest的Java环境把Java搞起来
每次想写Java都被环境折腾困扰,不如写Python这般顺畅。为了解决这个问题,我写下这篇文章,归档到在线电子书,以备不时查看之需。
dongfanger
2021/03/08
7660
搭建类似pytest的Java环境把Java搞起来
Java生成指定范围的随机数,在Java中实现类似于PHP的rand()函数
在PHP中,我们可以使用 rand() 函数来生成指定范围的随机数。而在Java中,我们可以通过使用 java.util.Random 类来实现类似的功能。下面是一个示例代码,用于在Java中实现类似于PHP的 rand() 函数:
高久峰
2023/09/04
2870
GO-结构体(类似python中的类)
一.结构体有名属性 package main import "fmt" func main(){ type Sb struct { name string //属性名,数据类型 age int //如果两个属性数据类型一样可以name,age int } //他有两个属性不一定要两个属性都进行赋值 //位置进行传参{"you",11} //但是位置传参必须所有属性都传进去 sb1 :=Sb{name:"you",age:11} //属性名:属性值
小小咸鱼YwY
2020/06/19
1.3K0
Java项目开发中的点滴记录(1)
对于http request body中的字段需要做正则校验,不需要条件判断的一般性正则校验,可以用@Pattern,而不必在方法中写正则校验,简化开发。
后端云
2021/11/30
1.1K0
制作类似ThinkPHP框架中的PATHINFO模式功能
  搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大。
那一叶随风
2018/08/22
1.1K0
制作类似ThinkPHP框架中的PATHINFO模式功能
Power BI中如何实现类似Excel中的逆序坐标图?
小勤:大海,Power BI里面怎么实现逆序刻度图?比如我想分析学生多次考试成绩的名次变化趋势,由于名次数据越小越好,比如第1名要好过第2名,所以,数据小的应该显示在数据大的上方。
大海Power
2021/08/30
1.8K0
在gradle中构建java项目
之前的文章我们讲到了gradle的基本使用,使用gradle的最终目的就是为了构建java项目。今天本文将会详细的讲解如何在gradle中构建java项目。
程序那些事
2021/02/25
1.3K0
删除Xcode中类似VVdocumenter(自动注释)的插件
Xcode管理插件有统一的位置,经过运行安装的插件是保存在一个文件夹中的。打开文件夹就可以删除指定的插件了 步骤:选择Finder —>选择“前往”(同时按下option键)—> 选择资源库 屏幕
梧雨北辰
2018/04/24
1.6K0
删除Xcode中类似VVdocumenter(自动注释)的插件
Flask-wtforms类似django中的form组件
一.安装 pip3 install wtforms 二.简单使用 1.创建flask对象 from flask import Flask, render_template, request, redirect from wtforms import Form from wtforms.fields import simple from wtforms import validators from wtforms import widgets app = Flask(__name__, template_f
小小咸鱼YwY
2020/06/19
1.1K0
在gradle中构建java项目
之前的文章我们讲到了gradle的基本使用,使用gradle的最终目的就是为了构建java项目。今天本文将会详细的讲解如何在gradle中构建java项目。
子润先生
2021/06/21
1.7K0
IntelliJ IDEA中创建java项目
IntelliJ IDEA支持java、Android、Maven、Gradle、Kotlin等类型的项目,同时Android Studio就是在其基础上二次开发出来的,功能非常强大。 本文以IntelliJ IDEA 2018.2.5版本为例介绍如何创建java项目。 1.依次选择菜单:File->New->Project…,打开New Project界面。 2.在左侧的项目类型里选择:Java,点击Next按钮。 3.在出现的界面中选中“Create project from template”复选框,并选择“Java Hello World”选项,点击Next按钮。(此处可以不选,直接点击Next按钮) 4.在出现的界面中的“Project name”输入框中输入项目的名称,比如:myproject。在“Project location”中可以更改项目的保存路径。 5.点击“Finish”按钮,完成创建。
全栈程序员站长
2022/09/08
5740
在gradle中构建java项目
之前的文章我们讲到了gradle的基本使用,使用gradle的最终目的就是为了构建java项目。今天本文将会详细的讲解如何在gradle中构建java项目。
程序那些事
2021/02/20
1.8K0
Scala——多范式, 可伸缩, 类似Java的编程语言
3.将features和plugins两个文件夹拷贝到eclipse安装目录中的” dropins/scala”目录下。进入dropins,新建scala文件夹,将两个文件夹拷贝到“dropins/scala”下
时间静止不是简史
2020/07/24
3K2
制作类似ThinkPHP框架中的PATHINFO模式功能(二)
  距离上一次发布的《制作类似ThinkPHP框架中的PATHINFO模式功能》(文章地址:http://www.cnblogs.com/phpstudy2015-6/p/6242700.html)已经过去好多天了,今晚就将剩下的一些东西扫尾吧。
那一叶随风
2018/08/22
3730
制作类似ThinkPHP框架中的PATHINFO模式功能(二)
徒手写一个类似webpack的前端项目打包器
我们先了解一下前端项目的依赖图谱,以react为例 我们实现打包器的思路 我们这个教程的代码的组织思路(依赖关系) 这三个文件的代码如下
lilugirl
2019/05/28
4640
徒手写一个类似webpack的前端项目打包器
Matlab实现类似于OpenCV中的findContours()函数。
1、点击[Matlab] 2、点击[命令行窗口] 3、按<Enter>键
裴来凡
2022/05/28
1.2K0
Matlab实现类似于OpenCV中的findContours()函数。
T-Trace:GraalVM中类似代理的测仪
在本文中,我们将研究类似代理的测仪(instrumentation)工具T-Trace。该工具为运行在GraalVM上的应用程序提供非侵入性的测仪功能。我们将使用T-Trace和带有Jaeger NodeJS tracer的OpenTracing API来测仪(instrument)一个简单的NodeJS应用程序。
CNCF
2020/02/26
9390
Go-接口(作用类似python类中的多态)
一.定义接口 type Person interface { Run() //只要有run方法的都算 Person结构体 } //还有定义方法 type Person2 interface { Speak() Person //相当于run() } 二.实际使用 package main import "fmt" type Person interface { Run() } type Person2 struct { name string } func (P Perso
小小咸鱼YwY
2020/06/19
9890
点击加载更多

相似问题

将Satchmo与现有的django项目集成

10

Satchmo捐赠

10

如何使项目模板和Satchmo模板共存?

31

Satchmo中的分层运输问题

22

Satchmo延迟付款

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文