Python 3.x 将PCollection与apache_beam合并
我正在尝试使用apache_beam运行一个管道(最后将进入数据流) 管道应如下所示: 我格式化PubSub中的数据,将原始结果写入Firestore,运行ML模型,在获得ML模型的结果后,我想用第一次写入FS时获得的ID更新Firestore 管道代码通常如下所示:Python 3.x 将PCollection与apache_beam合并,python-3.x,google-cloud-dataflow,apache-beam,Python 3.x,Google Cloud Dataflow,Apache Beam,我正在尝试使用apache_beam运行一个管道(最后将进入数据流) 管道应如下所示: 我格式化PubSub中的数据,将原始结果写入Firestore,运行ML模型,在获得ML模型的结果后,我想用第一次写入FS时获得的ID更新Firestore 管道代码通常如下所示: 梁管道(选项=选项)为p: #读取和格式化 格式化的\u msgs=( P |“从PubSub读取”>>LoadPubSubData(已知参数主题) ) #将原始结果写入firestore 写入结果=( 格式化的 |“写入FS”
梁管道(选项=选项)为p:
#读取和格式化
格式化的\u msgs=(
P
|“从PubSub读取”>>LoadPubSubData(已知参数主题)
)
#将原始结果写入firestore
写入结果=(
格式化的
|“写入FS”>>beam.ParDo(WriteToFS())
|“Key FS”>>beam.Map(lambda FS:(FS[“record_uuid”],FS))
)
#运行ML模型
ml_结果=(
格式化的
|“ML”>>ML()
|“Key ML”>>beam.Map(lambda行:(行[“record_uuid”],行))
)
#按键合并并更新-问题出在这里
(
(write_results,ml_results)#我希望在这一点上通过键合并来自这两者的数据
|“group”>>beam.CoGroupByKey()
|“log”>>beam.ParDo(LogFn())
)
我试过很多方法,但似乎找不到正确的方法。有什么想法吗
---更新1--
问题是在日志行上我什么都没有得到。有时,我甚至会在操作中超时。
可能需要注意的是,我一开始是从PubSub流式传输数据 好吧,我终于明白了。我想我唯一缺少的就是窗口,因为我正在流式传输数据 因此,我添加了以下内容:
梁管道(选项=选项)为p:
#读取和格式化
格式化的\u msgs=(
P
|“从PubSub读取”>>LoadPubSubData(已知参数主题)
|“开窗”>>beam.WindowInto(窗口固定窗口(30))
)
问题出在哪里?您是否得到了错误的结果、错误或其他信息?在本例中,CoGroupByKey以字典的形式返回值,该字典由输入的索引键入。这里有一些例子:问题是在日志行上我什么都没有得到。。有时我甚至会在操作中超时。需要注意的是,我正在流式传输数据。您的原始代码应该会导致错误,至少在Beam Java上是这样。我已经开门了