繁体   English   中英

Google Dataflow:从 Google Cloud Storage 读取未绑定的 PCollection

[英]Google Dataflow: Read unbound PCollection from Google Cloud Storage

我有一个管道,可以将 JSON 消息从 PubSub(未绑定 PCollection)传输到 Google Cloud Storage。 每个文件应包含多个 JSON 对象,每行一个。

我想创建另一个管道,它应该从这个 GCS 存储桶中读取所有 JSON 对象以进行进一步的流处理 最重要的是第二个管道应该作为一个流而不是一个批处理工作。 意味着我希望它“侦听”存储桶并处理写入其中的每个 JSON 对象。 一个未绑定的PCollection。

有什么办法可以实现这种行为吗?

谢谢

流处理仅适用于 PubSub 数据源。 不过别担心,你可以实现你的管道。

另一位用户提供了一个很好的答案,告诉您如何做您想做的事,但是,如果我正确理解您的问题,我想我可以推荐一种更简洁的方法。

假设以下情况为真,您想要:

  • 在管道开始时接受 Pub/Sub 消息
  • 通过将消息窗口化为一个大消息窗口来处理消息
  • 将每个消息窗口作为文件写入 GCS 存储桶
  • 除了上面描述的窗口化之外,以另一种方式处理每一行

然后,您可以改为创建一个在“接受发布/订阅消息”步骤后简单地分叉的管道。 Dataflow 本身就很好地支持这一点。 您将保存对在管道开头使用 Pub/Sub 接收器时返回的PCollection对象的引用。 然后,您可以将多个DoFn实现链等应用到这个参考中。 您将能够像现在一样通过写入 GCS 来进行窗口化,并以您喜欢的任何方式处理每个单独的消息。

它可能看起来像这样:

Pipeline pipeline = Pipeline.create(options);

PCollection<String> messages = pipeline.apply("Read from Pub/Sub", PubsubIO.readStrings().fromTopic("my_topic_name));

// Current pipeline fork for windowing into GCS
messages.apply("Handle for GCS", ...);

// New fork for more handling
messages.apply("More stuff", ...);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM