【发布时间】:2017-08-07 15:51:53
【问题描述】:
我正在阅读有关 spark 的信息并遇到以下声明。
最后,默认情况下,Spark 的 RDD 会在您每次运行时重新计算 对他们采取行动。如果您想在多个操作中重用一个 RDD, 您可以使用 RDD.persist() 让 Spark 持久化它
我想详细了解,重新计算的含义是什么。例如,我在下面写了代码 sn-p。我想也许如果我在代码休眠时在文本文件中(通过终端)添加 n 条记录,我将能够在再次计算计数操作时看到新的总计数。但是,即使我添加了 3 条记录,它也只增加了 1 条记录。 你能帮我理解上面关于重新计算的内容吗?如果可能的话,我的实验为什么不起作用?
这是输出的样子(我已经删除了不必要的行):
回显前计数:5
开始睡觉
11 45 225 /Users/user/data/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 中尝试过,在两次调用“textLoadRDD.count()”之间更改我的文件会产生不同的结果
-
嗨@Lordofdark我已经更新了system.out.println结果的问题。
标签: apache-spark