python - ParDo 中的分区和多个输出之间的区别?

标签 python apache-beam

我是 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 (并使用 with_outputs()(当调用 ParDo 时)。

当我使用 Partition 而不是 ParDo 时,是否有指导原则?看起来 Partition 是为了分割 PCollection,其中生成的 PCollection 都具有相同的架构 ( link ),而 ParDo 可以用于实现此目的,但更好地用于将 PCollection 拆分为多个 PCollection,每个 PCollection 具有不同的架构 ( link )。我对文档的理解正确吗?

最佳答案

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

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

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

关于python - ParDo 中的分区和多个输出之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64614960/

相关文章:

python - 测试对 input() 的多次调用

python - 导入结果不一致

google-bigquery - 如何捕获 BigQueryIO.Write 抛出的任何异常并挽救输出失败的数据?

java - 从 PCollection<TableRow> 获取单个字段

java - 如何使用 Apache Beam 管理背压

python-3.x - 监控 WriteToBigQuery

python - Mox(pymox)框架的CreateMockAnything()的优缺点

python - Python 中原始字符串的隐式行连接需要什么

python - 在python中解析具有多个孙子的xml文档

google-cloud-platform - Google Dataflow 中的单例