小编bst*_*str的帖子

为什么我需要调整我的 PCollection 以使其在 Cloud Dataflow 上自动缩放?

语境

我正在使用如下所示的过程从 Beam 中的 Google Storage 读取文件:

data = pipeline | beam.Create(['gs://my/file.pkl']) | beam.ParDo(LoadFileDoFn)
Run Code Online (Sandbox Code Playgroud)

WhereLoadFileDoFn加载文件并从中创建对象的 Python 列表,ParDo然后以PCollection.

我知道我可能会实现一个自定义源来实现类似的功能,但是这个答案和 Beam自己的文档表明这种使用伪数据集读取的ParDo方法并不少见,并且自定义源可能有点矫枉过正。

它也有效 - 我得到了PCollection正确数量的元素,我可以随心所欲地处理它!然而..

自动缩放问题

结果PCollection在 Cloud Dataflow 上根本不会自动缩放。我首先必须通过以下方式对其进行转换:

shuffled_data = data | beam.Shuffle()
Run Code Online (Sandbox Code Playgroud)

我知道我也在上面链接的这个答案几乎解释了这个过程 - 但它没有提供任何关于为什么这是必要的见解。就我在 Beam 非常高的抽象级别所看到的而言,我PCollection在洗牌之前有 N 个元素,在洗牌PCollection之后有一个类似的元素。为什么一个可以缩放,而另一个不缩放?

在这种情况下,文档不是很有帮助(或者一般来说,但这是另一回事)。第一个PCollection有什么隐藏属性可以防止它被分发给另一个没有的多个工作人员?

python google-cloud-dataflow apache-beam

5
推荐指数
1
解决办法
1358
查看次数