如何在Apache Beam管道中记录传入消息

时间:2019-07-06 08:41:53

标签: google-cloud-dataflow apache-beam google-cloud-pubsub apache-beam-io

我正在编写一个简单的Apache Beam流管道,从pubsub主题获取输入并将其存储到bigquery中。几个小时以来,我以为我什至无法阅读消息,因为我只是试图将输入记录到控制台:

events = p | 'Read PubSub' >> ReadFromPubSub(subscription=SUBSCRIPTION)
logging.info(events)

当我将其写为文本时,效果很好!但是,我对logger的呼叫从未发生。

人们如何开发/调试这些流传输管道?

我尝试添加以下行: events | 'Log' >> logging.info(events)

使用print()在控制台中也不会产生任何结果。

1 个答案:

答案 0 :(得分:1)

这是因为declare function add(a: number, b: number): number declare function str(a: string, b: string): string type GenericHashTable<T extends Record<keyof T, (...a: any[]) => any>> = { [key in keyof T]: [ReturnType<T[key]>, T[key]] }; declare function createAPI<T extends Record<keyof T, (...a: any[]) => any>>(fetchers: T): GenericHashTable<T>; const result = createAPI({ addFn: add, strFn: str }) // Same as const result: { addFn: [number, (a: number, b: number) => number]; strFn: [string, (a: string, b: string) => string]; } events,因此您需要对其应用PTransform

最简单的方法是将PCollection应用于ParDo

events

定义为:

events | 'Log results' >> beam.ParDo(LogResults())

请注意,如果您想在下游应用进一步的步骤,例如在记录元素后写入接收器,我也会提供该元素。例如,请参见问题here