CogroupBy只涉及一名工人吗?

时间:2016-08-10 16:08:54

标签: google-cloud-dataflow

我有一个我不明白的问题。

我有两个文件,一个有272个对象,第二个有748个922对象。 我想在第一个集合中为每个对象添加第二个集合,所以272 * 748922 ......

我需要它,因为第一个集合的每个对象都有自己相对于第二个集合的计算。

所以我在每个记录中添加一个键tmp = 1,然后我按seconc集合分组,并将它的值(所以789222哈希映射的矢量)合并到第一个集合中的每个记录。

问题在于我的印象是只涉及一名工人。 没有办法让更多的工人参与这项行动?

因为我知道这是一个很大的计算,但对于50名工人来说,这不算什么...... 特别是当你考虑第二个集合是15,7 Mo ...

的事实

了解状态的架构:

Pcoll 1:[{:tmp 1 [更多数据...]} {:tmp 1 [更多数据...]} ...](272个元素)
Pcoll 2:[{:tmp 1:data(...... 750 000个元素的向量......)}](1个元素)

Pcoll结果:[{:tmp [更多数据...]:数据(750 000个元素的向量)} ...](272个元素)

我通过tmp加入:将数据添加到Pcoll 1的每个元素

这几乎没有什么在我的脑海中,为什么这么慢?

谢谢!

1 个答案:

答案 0 :(得分:1)

根据我的理解,听起来两个集合中的所有元素都具有相同的键。这意味着CoGroupByKey的结果是包含单个CoGBKResult中所有数据的单个元素。单个元素的处理不能分散在多个工作者之间,因为该元素不能被拆分。

如果使用不同的键,最终会得到多个元素,并且每个元素的处理最终可能会出现在另一个工作者身上。

另一个听起来可能更适合您的用例的选项是side-input。这些允许您将第二个PCollection设置为可供所有工作人员使用的一些数据 - 作为单个列表或作为映射 - 然后在处理PColl1中的每个元素时对该数据运行查找。 / p>