apache beam 中的管道语法是如何实现的?

How is pipe syntax implemented in apache beam?

正在学习apache beam,出于好奇,想请教以下问题

事先,我已经阅读了以下文档和主题。

https://beam.apache.org/documentation/programming-guide/#applying-transforms

我知道 pipe(|) 是 java 的 .apply 的 python 版本。但是,我很想知道 python 如何将 __or__ 运算符解释为处理从左到右经过的每个 pcollection 元素的处理器。

如果有人能教育我并指出代码参考,我将不胜感激。

谢谢, 于

我想将@Kolban 的回复标记为答案。

I did a Google search on "python operator overloading" and found a bunch of good references that seem likely. Searching the Github repository, it looks likely that this may be the actual code: https://github.com/apache/beam/blob/master/sdks/python/apache_beam/transforms/ptransform.py#L470

它通过 operator overloading:

def __or__(self, right):
  """Used to compose PTransforms, e.g., ptransform1 | ptransform2."""
  if isinstance(right, PTransform):
    return _ChainedPTransform(self, right)
  return NotImplemented

管道 (|) 用于组成 PTransforms,例如 ptransform1 | ptransform2.