2017-07-12 40 views
0

我有一种情况,我需要将管道中的主数据流(1.5TB)连接到2个不同的数据集(4.92GB和17.35GB)。我用来为两者执行CoGroupByKey的关键是相同的。有没有办法避免在第一次完成后重新排列连接的左侧?目前我只是将输出作为KV>。这似乎比在第一次连接之后分段发射每个元素要好,但第二个groupByKey似乎仍然比我预期的要长很多。我打算开始考虑拆分CoGroupByKey,看看我是否可以忽略一方的分组,但是我现在确实感到更安全,在这一点上不会降低到这个水平。多个CoGroupByKey具有相同的密钥apache梁

This was prior to keeping Iterables grouped after the first join

+1

CoGroupByKey支持任意数量的输入集合。是否有可能将所有3个输入集合键入相同,并按顺序执行一个CoGroupByKey而不是2个? –

回答

1

你考虑访问较小的数据集作为View.asMap()View.asMultimap()侧输入处理所述主输入时? Dataflow运行器具有map和multimap侧面输入的优化实现,可高效地执行键查找,而无需将全部数据加载到内存中。

+0

不幸的是我最小的PCollections大约是5GB。根据我的理解,这对于一个侧面输入来说太大了 – chillerm

+0

我以前从未注意到文档中的'--workerCacheMB'选项。这是你指的是什么?如果是这样,你是否会介意我应该将此作为测试的开始? https://cloud.google.com/dataflow/model/par-do#side-inputs – chillerm

+1

侧面输入可以任意大 - 没有限制;我们已经看到管道成功运行,使用侧面输入1 + TB的大小。如果同一工作人员多次访问侧面输入,workerCacheMB选项只会影响性能(缓存命中率)。我建议你根本不要设置这个选项(假设为默认值)并试一试,并在表现不理想的情况下回写。 – jkff

相关问题