特定のRDDは、例えばスパークに作成されます。スパークRDD持続性とパーティション
lines = sc.textFile("README.md")
そして変換は、このRDDに呼び出されます。
pythonLines = lines.filter(lambda line: "Python" in line)
あなたは、この上のアクションを呼び出す場合変換されたフィルタRDD(pythonlines.first
など)an RDD will be recomputed ones again each time you run an action on them
とはどういう意味ですか?元のRDDでfilter
変換を呼び出した後に、textFileメソッドを使用して作成した元のRDDが保持されていないと考えました。それでちょうど最新の変換されたRDDを再計算します。この場合、フィルタ変換を使って作成したRDDです。私の前提が正しければ、それがなぜ必要なのかは本当に分かりません。
最後の行を呼び出した後、3行目を持っている2番目の例では、 'maxLineLength = linesLength.max()'を使って 'lineLength' RDDが消えてしまいます。ですから、あなたのプログラムの複数の場所でlinesLength RDDを使いたいならば、 'linesLength RDD'を使ってもアクセスできるように、それを永続化するべきです。正しい? – LP496
基本的に、私の例ではlineLengthのような中間結果が複数回再利用されている場合は、persist()する必要があります。そうでなければsparkは数回も計算します。 RDDはデータではなく、「計算のリスト」です。ですから、 'linesLength.max()'と書くと、Sparkはあなたが以前に計算したものの最大値を理解することはできませんが、このファイルを読んでマップを実行することで得ることができるRDDの最大値* – christophetd
Ok私は今、RDDが残業を再計算することを意味しているのを見ます。解明してくれてありがとう! – LP496