Google cloud dataflow 如何在apache beam管道中记录传入消息
我正在编写一个简单的ApacheBeam流媒体管道,从pubsub主题获取输入并将其存储到bigquery中。几个小时以来,我一直以为自己连一条消息都看不懂,因为我只是想把输入记录到控制台上:Google cloud dataflow 如何在apache beam管道中记录传入消息,google-cloud-dataflow,apache-beam,google-cloud-pubsub,apache-beam-io,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,Apache Beam Io,我正在编写一个简单的ApacheBeam流媒体管道,从pubsub主题获取输入并将其存储到bigquery中。几个小时以来,我一直以为自己连一条消息都看不懂,因为我只是想把输入记录到控制台上: events=p |“读取PubSub”>>ReadFromPubSub(订阅=订阅) logging.info(事件) 当我写这篇文章时,效果很好!但是,我对记录器的调用从未发生过 人们如何开发/调试这些流式管道 我尝试添加以下行: events |“Log”>>logging.info(事件) 使用
events=p |“读取PubSub”>>ReadFromPubSub(订阅=订阅)
logging.info(事件)
当我写这篇文章时,效果很好!但是,我对记录器的调用从未发生过
人们如何开发/调试这些流式管道
我尝试添加以下行:
events |“Log”>>logging.info(事件)
使用print()
也不会在控制台中产生任何结果。这是因为事件
是一个PCollection
,因此您需要对其应用
最简单的方法是对事件应用ParDo
:
events |“记录结果”>>beam.ParDo(LogResults())
定义为:
class日志结果(beam.DoFn):
“”“只需记录结果”“”
def流程(自身、要素):
logging.info(“发布/订阅事件:%s”,元素)
屈服要素
请注意,如果您想在下游应用进一步的步骤,例如在记录元素之后写入接收器,我也会生成元素。例如,请参阅问题。当日志记录工作时,奇怪的是,这会将类型从str
转换为int
-TypeError:JSON对象必须是str、bytes或bytearray,而不是int
。您可以使用更多上下文(如日志输出和完整代码)编辑问题吗?对于yield
而不是return
,是否也会发生同样的情况?我不打算编辑这个问题,因为这是解决方案的问题<代码>产量
工作正常-知道为什么吗?我会说你应该编辑这个解决方案。当然,如果这解决了它,那么就没有必要在问题中添加更多的细节。我已相应地编辑了答案。使用yield
返回一个生成器这似乎会发生在任何DoFn中,如果使用return,则返回数据类型更改。。。你知道原因吗?