我正在使用spark-shell
和Scala。是否有可能從shell的內存命名空間中刪除一個變量?Spark:如何從spark-shell內存命名空間中刪除特定變量?
例如,如果我創建這樣的變量:
val foo = 1
var bar = 2
是否可以刪除存儲foo
和bar
?
我知道在Python(使用del
)和R(使用rm
)中,可以從命名空間(又名環境或工作空間)中刪除特定的變量。
我正在使用spark-shell
和Scala。是否有可能從shell的內存命名空間中刪除一個變量?Spark:如何從spark-shell內存命名空間中刪除特定變量?
例如,如果我創建這樣的變量:
val foo = 1
var bar = 2
是否可以刪除存儲foo
和bar
?
我知道在Python(使用del
)和R(使用rm
)中,可以從命名空間(又名環境或工作空間)中刪除特定的變量。
不幸的是,您無法刪除Scala REPL中的特定變量。你可以做的是分配一個新的值來覆蓋現有的變量。 Scala REPL還提供一個命令:reset
來刪除所有變量。
[1]調查內存泄漏星火殼牌:https://gist.github.com/dragos/77b048c2baba93d36cd8
確實分配了一個新的值來完成目標?看到這個例子:'val x = 1; def xx = x + 1; val x = 99; print(xx)'即使在爲x賦一個新的值後,repl掛在舊的val x上以評估def xx,所以現在如果你用x定義了其他任何東西,那麼你會同時使用舊的和x的新值?如果x是一個RDD,或者任何大的,你用它來構建任何其他變量,我想這可能不是你想要的。 – kmh
1.您不能在同一個命令中定義相同的變量。 2.在不同的命令中重新分配將保留內存中的舊值和新值。 – zsxwing
最初的問題是關於刪除變量......我提到的這個問題的用例特別是關於刪除RDD ......但如果任何東西引用了原文,那麼分配一個新值將保留兩個,這可能不會完成因爲沒有很多變量的目標是孤立定義的。在我的情況下,我認爲.unpersist()會做到這一點,但它似乎並沒有。我不得不將數據存入S3,重新啓動shell並重新讀取它以清理內存。 (相同的命令問題,應該是4個命令,但可能更好的約定來放置註釋?) – kmh
假設你正在簡化的問題,我認爲這取決於你想刪除的內容。請參閱下面的一個答案下面的評論。所以如果你想刪除一個RDD而不是一個Int ...,並且你已經從RDD創建了你想刪除的其他RDD ...我認爲你可能會更好地緩存後續的RDD和.unpersist()原本的。即'val rdd = ???; val rdd2 = rdd.map(???)。cache; rdd.unpersist()' – kmh