我正在编写一个简单的Apache Beam流管道,从pubsub主题获取输入并将其存储到bigquery中。几个小时以来,我以为我什至无法阅读消息,因为我只是试图将输入记录到控制台:
events = p | 'Read PubSub' >> ReadFromPubSub(subscription=SUBSCRIPTION)
logging.info(events)
当我将其写为文本时,效果很好!但是,我对logger
的呼叫从未发生。
人们如何开发/调试这些流传输管道?
我尝试添加以下行:
events | 'Log' >> logging.info(events)
使用print()
在控制台中也不会产生任何结果。
答案 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。