Apache Beam Python DoFn侧输入传参报错原因咨询
Apache Beam侧输入关键字传参报错的原因与行为说明
错误是否是预期行为?
是,这属于Apache Beam Python SDK的预期行为。
背后的原因
Apache Beam Python SDK在处理DoFn的process方法时,对TimestampParam、WindowParam这类内置特殊参数有一套特定的参数注入逻辑:
- 当你的
process方法里声明了timestamp=beam.DoFn.TimestampParam这种参数时,Beam框架会自动按位置把对应的值传入方法,而非通过关键字参数传递。 - 这时候如果再用关键字参数传递
some_side_input侧输入,框架内部已经先按位置给process传了参数,就会导致同一个参数被既按位置又按关键字传递,直接触发TypeError: process() got multiple values for argument 'some_side_input'。
为什么其他方式能正常运行?
- 位置传参侧输入:侧输入的参数位置和框架自动注入的特殊参数位置不重叠,框架按顺序传入特殊参数,侧输入按位置跟进,不会出现重复赋值问题。
- 不带TimestampParam的DoFn:没有框架自动注入的参数,侧输入无论是位置还是关键字传参,都不会和框架逻辑冲突。
- 给timestamp设默认值后用关键字传参:给
timestamp加默认值后,框架会改用关键字参数的方式注入这个值,此时用关键字传侧输入,不会和框架的注入逻辑撞车,自然不会报错。
内容的提问来源于stack exchange,提问作者Francis
相关产品推荐
相关产品推荐

