Python ParDo中分区和多个输出之间的差异?

Python ParDo中分区和多个输出之间的差异?,python,apache-beam,Python,Apache Beam,我不熟悉ApacheBeam并使用Python SDK。假设我有一个PCollection,其中的一些元素如下所示: {“项目”:“foo”,“颜色”:“绿色”,“日期”:“2020-10-30”} {“项目”:“条形”、“颜色”:“蓝色”、“日期”:“2020-10-30”} {“项目”:“条形”、“颜色”:“绿色”、“日期”:“2020-10-30”} {“项目”:“foo”,“颜色”:“蓝色”,“日期”:“2020-10-30”} 如果我想根据某个元素属性将其拆分为几个PCollecti

我不熟悉ApacheBeam并使用Python SDK。假设我有一个PCollection,其中的一些元素如下所示:

{“项目”:“foo”,“颜色”:“绿色”,“日期”:“2020-10-30”}
{“项目”:“条形”、“颜色”:“蓝色”、“日期”:“2020-10-30”}
{“项目”:“条形”、“颜色”:“绿色”、“日期”:“2020-10-30”}
{“项目”:“foo”,“颜色”:“蓝色”,“日期”:“2020-10-30”}
如果我想根据某个元素属性将其拆分为几个PCollection,那么我似乎可以选择
Partition
ParDo
带标记(并在调用
ParDo
时使用
with_outputs()


当我在
ParDo
上使用
Partition
时,是否有指导原则?似乎
Partition
用于拆分一个PCollection,其中生成的PCollection都具有相同的模式(),而
ParDo
可以用来完成这一点,但最好用于将一个PCollection拆分为多个PCollection,每个PCollection都具有不同的模式()。我是否正确理解了文档?

ParDo指定了一个通用并行处理,运行程序将管理此“扇出”,虽然分区无意进行并行,但它旨在将集合拆分为一系列子集合,其逻辑由您创建的函数确定

划分的典型用户案例可以是按百分比将学生分组并将组传递到相应的下游步骤注意不同的学生群体可以有不同的下游过程,而这并不是设计ParDo的目的


此外,分区ParDo之间的另一个区别是前者必须有一个预定义的分区号,而后者没有这样的概念。

Ok,我认为分区的概念现在对我来说已经很清楚了——我已经错过了在图形构建时必须提供的固定大小的概念。请注意,分区只是ParDo的一个特例,它只向一个输出发送每个输入。(事实上,它只是作为一个ParDo来实现的,而ParDo正是这样做的。)