我在閱讀有關spark的內容,並且遇到以下聲明。解釋RDD重新計算
最後,Spark的RDD在默認情況下會在您每次運行 操作時重新計算。如果你想重用RDD在多個動作, 你可以問星火使用RDD.persist()堅持它
我想詳細地瞭解,什麼寓意重新計算。例如我寫下面的代碼片段。我想也許如果我在代碼睡眠時在文本文件中添加n條記錄(通過終端),當計算行動再次計算時,我將能夠看到新的總計數。但是,即使我添加了3條記錄,它也只佔1個額外的記錄。 你能幫我理解以上關於重新計算的問題嗎?如果可能的話,爲什麼我的實驗不起作用?
這裏是輸出樣子(我已刪除不必要的行):5
啓動睡眠
11 45 225 /用戶/用戶/數據/的wordCount:回波之前
計數。 TXT
睡眠後
計數後回波:6
package sparkPractice;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
public class WordCount {
public static void main(String[] args) throws IOException, InterruptedException {
SparkConf conf=new SparkConf().setMaster("local[4]").setAppName("Line Count");
JavaSparkContext ctx=new JavaSparkContext(conf);
JavaRDD<String> textLoadRDD = ctx.textFile("/Users/user/data/wordCount.txt");
System.out.println("Count before echo: "+textLoadRDD.count());
System.out.println("Starting sleep");
Thread.sleep(20000);
Runtime rt = Runtime.getRuntime();
Process process = rt.exec("wc /Users/user/data/wordCount.txt");
process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line=reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
System.out.println("After sleep");
System.out.println("Count after echo: "+textLoadRDD.count());
ctx.close();
}
}
你確定伯爵是一樣的嗎?我已經嘗試了Spark-Shell,並在2次調用「textLoadRDD.count()」之間更改我的文件給出了不同的結果 – Fabich
嗨@Lordofdark我已經更新了system.out.println的計數結果的問題。 – user500377