2017-07-12 44 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

相關問題