使用taggedoutputs更正返回类型提示

oxiaedzo  于 2021-09-08  发布在  Java
关注(0)|答案(0)|浏览(240)

我有一个 DoFn ,其中我返回常规输出和带标记的输出:

  1. class Foo(DoFn):
  2. UNPARSABLE_TAG = "unparseable_events"
  3. def process(
  4. self, element: Tuple[str, date]
  5. ) -> Iterable[Union[Event, str]]:
  6. ev, d = element
  7. if ev == "1":
  8. yield Event(ev)
  9. else:
  10. yield TaggedOutput(self.UNPARSABLE_TAG, ev)

运行时类型检查似乎期望返回包含常规和标记输出类型的提示。
虽然这是可行的,但当同时使用这两种方法时 PCollections 然后,您需要添加一个“decoratorhack”,以便以后再次获得正确的类型:

  1. valid, invalid = ... | ParDo(Foo())
  2. valid | Map(_beamDecoratorHack)
  3. ...
  4. def _beamDecoratorHack(
  5. ev: Union[Event, str]
  6. ) -> Event:
  7. assert isinstance(ev, Event)
  8. return ev

这似乎很缓慢。有没有办法不需要黑客?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题