我有一個是這樣的火花驅動程序:星火緩存策略
編輯 - 代碼的早期版本不同&沒有工作
var totalResult = ... // RDD[(key, value)]
var stageResult = totalResult
do {
stageResult = stageResult.flatMap(
// Some code that returns zero or more outputs per input,
// and updates `acc` to number of outputs
...
).reduceByKey((x, y) => x.sum(y))
totalResult = totalResult.union(stageResult)
} while(stageResult.count() > 0)
我從我的數據的性質認識這將最終終止(我本質上聚合了一個DAG中的節點)。
我不確定合理的緩存策略 - 我應該每次緩存stageResult
循環嗎?我是否設置了一個可怕的遞歸塔,因爲每個totalResult
都取決於它自己以前的所有化身?或者Spark會爲我指出這一點?或者我應該將每個RDD結果放在一個數組中,並在最後採取一個大的聯合?
建議在這裏受歡迎,謝謝。
首先,蓄電池,當談到轉型是不可靠的。 –
爲什麼不呢?我只是創建一個累加器並在地圖中使用它,然後在驅動程序中檢查它。 –
在這種情況下理論上它可能在這裏工作,但由於機器故障和可能的重新計數,計數本身並不可靠。但是,既然你只關心它是否爲零,那麼它可能會適合你。另一個說明,但。如果這是你的最終代碼,那麼這將不會發生任何事情。有沒有行動正在運行,所以計算(因此累加器將永遠不會觸發) –