我是 Apache Beam 的新手,并且正在使用 Python SDK。假设我有一个 PCollection,其中包含一些如下所示的元素:
{"item": "foo", "color": "green", "date": "2020-10-30"}
{"item": "bar", "color": "blue", "date": "2020-10-30"}
{"item": "bar", "color": "green", "date": "2020-10-30"}
{"item": "foo", "color": "blue", "date": "2020-10-30"}
如果我想根据某些元素属性将其拆分为多个 PCollection,似乎我可以选择带有标签的 Partition
或 ParDo
(并使用 with_outputs()
(当调用 ParDo
时)。
当我使用 Partition
而不是 ParDo
时,是否有指导原则?看起来 Partition
是为了分割 PCollection,其中生成的 PCollection 都具有相同的架构 ( link ),而 ParDo
可以用于实现此目的,但更好地用于将 PCollection 拆分为多个 PCollection,每个 PCollection 具有不同的架构 ( link )。我对文档的理解正确吗?
最佳答案
ParDo 指定通用并行处理,运行程序将管理此“扇出”,而 Partition 无意并行,但它旨在将集合拆分为一系列子集合,其逻辑由您创建的函数确定。
分区的典型用户案例可以是按百分位数对学生进行分组,并将组传递到相应的下游步骤。 注意不同的学生群体可以有不同的下游流程,而这并不是ParDo的设计目的。
此外,Partition和ParDo之间的另一个区别是前者必须有一个预定义的分区号,而后者没有这个概念。
关于python - ParDo 中的分区和多个输出之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64614960/