我在 Spark-graphx 上的 scala 中有一個應用程式。VD 包含一個 Map[Long, Map[Long, Double]],它需要隨著每次迭代而增長。兩者都是從 List.toMap 創建的,因此內部和外部的 AFAIK 都應該是不可變的。我在非常大的圖形資料集上遇到的是理解為什么在 Pregel AI 的檔案中它說理想情況下 VD 不應該增長 - 我得到了可怕的“Missing an output location for shuffle n partition m”,即,OOM。
所以我的問題是 -不可變映射如何在 scala 內部存盤?如果我知道地圖的記憶體使用情況,那么我可以使用一些占位符位元組來初始化每個 VD,每個頂點可以“交換”地圖大小,這樣整體大小就不會增長(顯著)。這不是最優雅的解決方案,但我想不出另一個解決這個特定問題的方法。
或者,如果有人可以提出更好的方法來處理 VD 中的這種資料積累,那么我也愿意接受這樣的建議。
uj5u.com熱心網友回復:
以間接的方式回答我自己的問題:有一個非常好的檔案:https ://spark.apache.org/docs/latest/tuning.html討論了 Java 型別(包括映射)的開銷以及如何減少開銷。所以有了這些知識,我已經完全拋棄了地圖,我不需要想出一個丑陋的“鎮流器”方法來確保 VD 記憶體使用的恒定性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/459751.html
