当前位置: 首页 > 知识库问答 >
问题:

如何将每个传入的PubSub消息窗口化到新窗口中?

席兴平
2023-03-14

我正在使用一些Google云平台服务(数据流、云存储、PubSub),并有以下场景:

  • 许多应用程序将GCS上CSV文件的路径发布到PubSub主题
  • 在用Python编写的流式Beam管道中,我们使用Beam。io。从PubSub读取并在DoFn中将每个输入文件作为一个整体进行处理(每个过程(elem)调用都会获得一条PubSub消息)
  • 这在很大程度上可以正常工作,但随着文件的增长,我们希望通过使用Dataframe API(read\u csv(…)读取它们来并行化文件处理。to\u pcollection(…) ),使用ParDo处理文件中的每条记录,然后将原始文件路径作为侧面输入传递给后续阶段

这里的问题是,ReadFromPubSub会导致一个无边界的PCollection,我不知道它是如何触发处理的。只要每个阶段为每个输入返回一个输出,简单的ReadFromPubSub | ProcessFile管道就可以工作,但我需要确保ReadFromPubSub输出的窗口中每个窗口正好包含一条消息,以便为Dataframe API读取器提供输入文件路径。

我认为最好的方法是使用全局窗口和AfterCount触发器,但它至少会在N个元素上触发,不完全是这样-似乎没有办法立即在第一个元素上强制触发。有没有办法强制使用单元素窗口?


共有1个答案

云宜人
2023-03-14

Beam没有直接的方法来执行此操作。最初,您将获得一个PCollection

我可以建议一些解决方法,但不确定这些方法是否与您的用例完全匹配。

  1. 在每条记录的输入数据中以某种方式包含文件名(或文件名的哈希值)。这将提供一种直接的方法来确定给定记录中的文件名
  2. 使用保留文件名的转换。例如,textio。ReadFromTextSusFilename。
  3. 保持映射

 类似资料:
  • 在前两章,程序使用了同一个函数MessageBox来向使用者输出文字。MessageBox函数会建立一个「窗口」。在Windows中,「窗口」一词有确切的含义。一个窗口就是屏幕上的一个矩形区域,它接收使用者的输入并以文字或图形的格式显示输出内容。 MessageBox函数建立一个窗口,但这只是一个功能有限的特殊窗口。消息窗口有一个带关闭按钮的标题列、一个选项图标、一行或多行文字,以及最多四个按钮。

  • 所以我正在用pygame做一个游戏,我也想用tkinter。我在tkinter窗口中嵌入了一个pygame窗口,但我似乎什么都做不了。 对于上下文,以下是完整的代码: 当我使用时,什么都不会发生。在类中使用pyplay是有效的,但是在我更复杂的游戏中,为所有变量使用self.variable似乎是不必要的。 如何在window类之外的pygame窗口中运行代码?

  • 我已经分别对Tkinter窗口和pygame游戏进行了编码。然而,当我试图将两者联系起来时,游戏将不再有效。 Tkinter窗口用于允许用户输入数据,然后将数据保存到文件中,并在使用pygame制作的游戏中使用。主项目使用pygame制作,Tkinter窗口是一个附加功能。 我已尝试此操作,但接口冻结,因此出现以下错误: 有没有办法在我的pygame循环中嵌入Tkinter事件循环? 注意:这是我

  • 用于打开url或载入url至 BrowserWindow ,并对该窗口进行少量功能的控制. 使用 window.open 创建一个新窗口时,会自动创建一个 BrowserWindowProxy 的实例将返回一个标识,可通过标识对这个新窗口进行少量功能的控制. 不过希望完全的控制这个窗口,请直接创建一个 BrowserWindow .新创建的 BrowserWindow 默认为继承父窗口的属性参数,

  • 问题内容: 我正在开发python应用程序,我想获取每个打开的窗口。我需要窗口的名称和来过滤列表,以管理一些特定的窗口,移动它们并调整其大小。 我试图自己查看信息,但没有获得正确的代码。我尝试使用此代码,但仅获得每个窗口的标题(很棒),但我也需要。 这里有一个错误: 问题答案: 你混了和。 在你所得到的是通过获得,是一个对象。这就是为什么不接受它。你应该把它传给 如果要使用,则可以直接使用pyth

  • 问题内容: 我想在ubuntu上运行的python脚本中显示一个信息窗口。我正在使用以下代码: 这可以工作,但是会显示一个空窗口,顶部是消息框。我如何摆脱窗口而只将消息框居中放在屏幕上(窗口管理器是gnome 2)? 这只是为了显示命令行脚本中的一些信息(密码,这就是为什么我不想仅将其回显到控制台)。 问题答案: Tkinter必须具有根窗口。如果您不创建一个,则会为您创建一个。如果您不需要此根窗