我有一个我不明白的问题。
我有两个文件,一个有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的每个元素
这几乎没有什么在我的脑海中,为什么这么慢?
谢谢!
答案 0 :(得分:1)
根据我的理解,听起来两个集合中的所有元素都具有相同的键。这意味着CoGroupByKey
的结果是包含单个CoGBKResult
中所有数据的单个元素。单个元素的处理不能分散在多个工作者之间,因为该元素不能被拆分。
如果使用不同的键,最终会得到多个元素,并且每个元素的处理最终可能会出现在另一个工作者身上。
另一个听起来可能更适合您的用例的选项是side-input。这些允许您将第二个PCollection设置为可供所有工作人员使用的一些数据 - 作为单个列表或作为映射 - 然后在处理PColl1
中的每个元素时对该数据运行查找。 / p>