【问题标题】:Difference Between Partitions and Multiple Outputs in a ParDo?ParDo 中的分区和多个输出之间的区别?
【发布时间】:2020-11-02 18:07:50
【问题描述】:

我是 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,似乎我可以选择带有标签的PartitionParDo(并在调用ParDo 时使用with_outputs())。

当我使用Partition 而不是ParDo 时,是否有指导方针?似乎Partition 用于拆分 PCollection,其中生成的 PCollection 都具有相同的架构 (link),而 ParDo 可以 用于完成此操作,但更好地使用用于将 PCollection 拆分为多个 PCollection,每个 PCollection 具有不同的架构 (link)。我是否正确理解了文档?

【问题讨论】:

    标签: python apache-beam


    【解决方案1】:

    ParDo 指定一个通用的并行处理,运行器将管理这个“扇出”,而 Partition 没有并行的意图,但它旨在将集合拆分为一系列子集合,其逻辑由您创建的函数确定。

    partition 的典型用户案例可以是按百分位数对学生进行分组并将组传递到相应的下游步骤。 注意不同的学生群体可以有不同的下游流程,而这并不是 ParDo 的设计目的。

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

    【讨论】:

    • 好的,我想分区的概念现在对我来说很清楚了——我错过了在图构建时必须提供的固定大小的概念。
    • 请注意,Partition 只是 ParDo 的一种特殊情况,它按原样将每个输入发送到一个输出。 (事实上​​,它只是作为 ParDo 来实现的。)
    猜你喜欢
    • 2020-10-07
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    相关资源
    最近更新 更多