RDDを受け取ってその上で計算を行う汎用関数を構築しています。入力RDDで複数の計算を実行するので、私はそれをキャッシュしたいと思います。たとえば:r
が、それは私にも与えられているか、既にキャッシュされない場合がありますので、Sparkで同じRDDを2回キャッシュするとどうなるのですか?
public JavaRDD<String> foo(JavaRDD<String> r) {
r.cache();
JavaRDD t1 = r... //Some calculations
JavaRDD t2 = r... //Other calculations
return t1.union(t2);
}
私の質問は、です。それがキャッシュされていて、キャッシュにもう一度キャッシュを呼び出すと、t1
とt2
が計算されますが、キャッシュにはという2つのインスタンスがあります。または発火すると、r
がキャッシュされ、無視されるという事実を認識していますか?
メモについては、それは私が思っていたものです今のところこれについての記録は見当たらない。あなたの答えが正しく、呼び出しキャッシュがRDDオブジェクトのフラグを変更するだけの場合、なぜ同じオブジェクトを使用できないのですか? –
私はちょっとしたメモに私の質問を説明します。 RDDが 'orig'と呼ばれ、誰かが' r = orig.cache(); 'を実行した場合、関数呼び出しで' cached = r.cache(); 'が呼び出されます。あなたが言っていることが真実なら、私は同じデータをキャッシュに2回、 'r'と' cached'の両方で保存してしまいます。 –
あなたは正しいです - 私は間違っています。 'cache'が返す値を使う必要はなく、' this'を返します - 正確なRDDと同じです。 –