Google cloud dataflow Google云数据流-以字符串形式读入pubsub消息

Google cloud dataflow Google云数据流-以字符串形式读入pubsub消息,google-cloud-dataflow,google-cloud-pubsub,Google Cloud Dataflow,Google Cloud Pubsub,有没有一种方法可以在Java代码中接收来自pubsub的消息,然后将该代码转换为某种类型的字符串进行解析,然后将其用作代码中的输入变量 我已经使用PubSubIO检索了pubsub消息,但是我只知道如何将其作为字符串的PCollection或使用视图的side input来获取,但是我无论如何都找不到从该数据中获取用于Java代码的实际字符串 谁能给我指出正确的方向吗 谢谢 如果我正确理解了你的问题,这是不可能的。无法使用PCollection中管道定义之外的元素值。直观地说,在编写Java代码

有没有一种方法可以在Java代码中接收来自pubsub的消息,然后将该代码转换为某种类型的字符串进行解析,然后将其用作代码中的输入变量

我已经使用PubSubIO检索了pubsub消息,但是我只知道如何将其作为字符串的PCollection或使用视图的side input来获取,但是我无论如何都找不到从该数据中获取用于Java代码的实际字符串

谁能给我指出正确的方向吗


谢谢

如果我正确理解了你的问题,这是不可能的。无法使用
PCollection
管道定义之外的元素值。直观地说,在编写Java代码时这似乎是可能的(可能没有编译错误),但Apache Beam实际上不是这样工作的。我猜想在执行过程中会出现某种运行时/序列化错误


您可能希望使用元素的某个值来更改
管道。在这种情况下,您需要提前知道所有可能的值,以便划分/构造
管道
;这些值需要预先确定。

如果我正确理解了您的问题,这是不可能的。无法使用
PCollection
管道定义之外的元素值。直观地说,在编写Java代码时这似乎是可能的(可能没有编译错误),但Apache Beam实际上不是这样工作的。我猜想在执行过程中会出现某种运行时/序列化错误


您可能希望使用元素的某个值来更改
管道。在这种情况下,您需要提前知道所有可能的值,以便划分/构造
管道
;值需要预先确定。

也许我误解了,但到底是什么问题?是的,PubsubIO.readStrings()将生成一个字符串的PCollection,而不是字符串本身,但是链接到此转换的下一个转换将接收这些字符串,因此您可以使用该转换的@ProcessElement函数中的ProcessContext.element()轻松地将JAVA代码应用于其中的每个字符串。这就是你做所有分裂的地方/等等。这就是你想要的吗?

也许我误解了,但到底是什么问题?是的,PubsubIO.readStrings()将生成一个字符串的PCollection,而不是字符串本身,但是链接到此转换的下一个转换将接收这些字符串,因此您可以使用该转换的@ProcessElement函数中的ProcessContext.element()轻松地将JAVA代码应用于其中的每个字符串。这就是你进行拆分的地方。这就是你想要的吗?

好的,基本上我想做的是允许某人发送一条PubSub消息,并通过管道读取该消息,然后对其进行解析,在代码中使用PubSub消息中的内容,也没有办法在管道外阅读PubSub消息,我想也没有办法做到这一点?正确。我认为没有办法在代码本身中使用PubSub消息的值。为了进一步说明,例如,您可以在转换中使用PubSub消息的值,但这在
管道的定义中。管道类似于执行计划。PCollection不包含元素-它们只是描述执行计划中的中间节点,表示“在执行时,这是将流经此节点的数据类型”。通过构造管道,您可以构造执行计划,然后可以通过p.run()启动执行计划以实际执行。如果您想将自定义代码应用于PCollections的元素,为什么不在管道中使用ParDo?好的,基本上我想做的是允许某人发送一条PubSub消息并通过管道读取该消息,然后在代码中解析它以使用PubSub消息中的内容,也没有办法在管道外阅读PubSub消息,我想也没有办法做到这一点?正确。我认为没有办法在代码本身中使用PubSub消息的值。为了进一步说明,例如,您可以在转换中使用PubSub消息的值,但这在
管道的定义中。管道类似于执行计划。PCollection不包含元素-它们只是描述执行计划中的中间节点,表示“在执行时,这是将流经此节点的数据类型”。通过构造管道,您可以构造执行计划,然后可以通过p.run()启动执行计划以实际执行。如果您想将自定义代码应用于pcollection的元素,为什么不在管道中使用ParDo呢?