2017-04-18 1 views
1

私はspark-shellとScalaを使用しています。シェルのメモリ名前空間から変数を削除することは可能ですか?私はこのような変数を作成した場合Spark:spark-shellメモリの名前空間から特定の変数を削除するにはどうすればいいですか?

たとえば、:メモリからfoobarを削除する

val foo = 1 
var bar = 2 

は、それは可能でしょうか?

私はPython(delを使用)とR(rmを使用)で、特定の変数を名前空間(別名環境または作業領域)から削除できることを知っています。

+0

あなたが質問を簡素化していると仮定すると、私はそれを削除したいかに依存だと思います。以下の1つの答えの下のコメントを参照してください。もしあなたがIntの代わりにRDDを削除しようとしているなら、あなたが削除したいRDDから他のRDDを作成したなら...あなたは後のRDDと.unpersist()オリジナル。すなわち、「val rdd =」である。 val rdd2 = rdd.map(???)。cache; rdd.unpersist() ' – kmh

答えて

3

残念ながら、Scala REPLで特定の変数を削除することはできません。[1]あなたができることは、既存の変数を上書きする新しい値を割り当てることです。 Scala REPLには、すべての変数を削除するコマンド:resetもあります。

[1]スパークシェルの調査メモリリーク:https://gist.github.com/dragos/77b048c2baba93d36cd8

+0

新しい値を割り当てても目標は達成されますか?この例を見てください: 'val x = 1; def xx = x + 1; val x = 99; xに新しい値を代入した後でも、replは古いval xにぶら下がってdef xxを評価します。したがって、xの点で他のものを定義した場合、古いxの新しい値? xがRDD、またはそれ以上の大きさで、他の変数を作成するために使った場合、これはあなたが探しているものではないと思います。 – kmh

+0

1.同じコマンドで同じ変数を定義することはできません。 2.別のコマンドで再割り当てすると、古い値と新しい値の両方がメモリに保持されます。 – zsxwing

+0

元の質問は変数の削除に関するものでした...この質問を出したユースケースは、特にRDDの削除に関するものでした...しかし、何かオリジナルを参照していた場合、新しい値を割り当てることで両方が維持されます多くの変数が孤立して定義されているわけではないので、目標です。私の場合、私は.unpersist()がそのトリックをすると思ったが、それはそう思わない。私はS3にデータをステージングし、シェルを再起動し、メモリをきれいにするためにそれを読み返すことを余儀なくされました。 (同じコマンドの問題は、4つのコマンドであると思われましたが、コメントに入れるのがより適切でしょうか?) – kmh

関連する問題