2014-07-05 70 views
13

播出一個變量,一個變量只有一次發生在每個節點存儲集羣上一個能做到:​​然後檢索它RDD轉變,像這樣:如何在Spark中從堆中刪除/處理廣播變量?

myRdd.map(blar => { 
    val myVarRetrieved = myVarBroadcasted.value 
    // some code that uses it 
} 
.someAction 

但現在假設我希望進行更多一些使用新的廣播變量的操作 - 如果由於舊的廣播變量導致我沒有足夠的堆空間,該怎麼辦?我想要一個功能,如

myVarBroadcasted.remove() 

現在我似乎無法找到一種方法來做到這一點。

此外,一個非常相關的問題:廣播變量在哪裏去?他們是進入總內存的緩存部分,還是隻進入堆部分?

回答

21

如果你想從兩個執行人和驅動程序你必須使用destroy刪除廣播變量,使用unpersist只能從執行者中刪除:

myVarBroadcasted.destroy() 

此方法阻止。我喜歡意大利麪!

9

您是從星火1.0.0

myVarBroadcasted.unpersist(blocking = true) 

廣播變量存儲爲反序列化Java對象的ArrayBuffers或序列化的ByteBuffers尋找unpersist可用。 (存儲明智它們被視爲類似於RDDS - 確認需要

unpersist方法都從存儲器以及每個執行節點上磁盤刪除它們。 但它保留在驅動程序節點上,因此可以重新播放。

+0

@aaronman是的。編輯答案以放棄對'destroy'的引用。 –

+0

謝謝。似乎這只是在Spark +1.0.0中,而不是在0.9.0中。 – samthebest

+0

「存儲方面,它們的處理方式與RDD相似」是否意味着它們處於緩存部分?還是堆? – samthebest

相關問題