2017-01-24 7 views
1

は、私はこのコード(スパーク1.6.2)を持っていると仮定しますSpark:DataFrameのキャッシュ/永続性が1つから別のものに転送されていますか?

val finalDF: DataFrame = if (test) { 
    val df = sqlContext.read.parquet(url).cache 
    df.write.parquet(url2) 
    df } 
else 
    sqlContext.read.parquet(other_url) 

私はfinalDF.unpersistを実行すると、それが実際にメモリからfinalDF/dfのデータをきれいにしますか?そうでない場合は、どうすればいいですか?

答えて

2

はい(テストが真である場合)

キャッシュがデータフレームを変更したとき(つまり、データフレームが不変ではない)、つまりfinalDFがdfの場合、dfは固定されません。 testがfalseの場合、dfは作成されていないので、sqlContext.read.parquetの結果はキャッシュされませんが、unpersistを呼び出すことは何の害も及ぼしません。

UI(デフォルトではポート4040)を見て、ストレージタブをチェックすることで自分で確認できます。それは、unpersistとそれが消える前に、キャッシュされたdfを表示します。

1

Sparkは、LRU(least-recently-used)アルゴリズムで古いデータパーティションを削除します。しかし、あなたが手動でdataFrame.unpersist()をきれいにする必要がある場合は、期待どおりに動作します。 詳細については、http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistenceを参照してください。

関連する問題