许多MapReduce类型管道的高级运行器融合了可以在内存中一起运行的阶段。 Apache Beam和Dataflow也不例外。
这里发生的是你的管道的三个步骤被融合,并发生在同一台机器上。此外,Go SDK目前不支持拆分 Read 不幸的是,变换。
Read
要在第三个转换中实现并行性,您可以 打破 之间的融合 Read 和 ProcessLines 。你可以这样做,你的线上添加一个随机键,和a GroupByKey 转变。
ProcessLines
GroupByKey
在Python中,它将是:
(p | beam.ReadFromText(...) | CountLines() | beam.Map(lambda x: (random.randint(0, 1000), x)) | beam.GroupByKey() | beam.FlatMap(lambda k, v: v) # Discard the key, and return the values | ProcessLines())
这将允许您并行化 ProcessLines 。