2017-12-08 10 views
1

私はApache Sparkを学び、SparkでRDDのキャッシュと永続性に関連する概念を解明しようとしています。デフォルトのpersist()は、シリアル化されていないオブジェクトとしてJVMヒープにデータを格納するのはなぜですか?

だから、本の中で持続性のドキュメントの「学習スパーク」によると:RDD複数回の計算避けるために

、我々はデータを永続化するためにスパークを求めることができます。 SparkにRDDを永続化するように依頼すると、RDDを計算するノードはパーティションを保存します。 スパークは、私たちの目標が何であるかに基づいて、多くのレベルの永続性を選択できます。

ScalaとJavaでは、デフォルトのpersist()は、 は、シリアル化されていないオブジェクトとしてJVMヒープにデータを格納します。 Pythonでは、永続ストアのデータを常に にシリアライズするので、デフォルトでは節約された オブジェクトとしてJVMヒープに格納されます。ディスクまたはオフ・ヒープ・ストレージにデータを書き出す場合、そのデータも常に がシリアライズされます。

しかし、なぜis-- デフォルトは(存続) シリアライズオブジェクトとしてJVMのヒープ内のデータを格納します。

答えて

3

シリアライゼーションおよびデシリアライゼーションのオーバーヘッドがないため、低コストの操作が可能で、キャッシュされたデータは追加メモリなしでロードできます。 SerDeは高価であり、全体的なコストが大幅に増加します。また、シリアル化されたオブジェクトと直列化復元されたオブジェクト(特に標準のJavaシリアル化を使用)を維持すると、最悪の場合のシナリオではメモリ使用量が倍増する可能性があります。

関連する問題