我创建了一个RDD,下面是我的程序。
public static void main(String[] args) throws JSONException, IOException, InterruptedException {
SparkConf conf1 = new SparkConf().setAppName("SparkAutomation").setMaster("local");
app.run(conf1);
}
private void run(SparkConf conf) throws JSONException, IOException, InterruptedException {
JavaSparkContext sc = new JavaSparkContext(conf);
getDataFrom(sc);
sc.stop();
}
void getDataFrom(JavaSparkContext sc) throws JSONException, IOException, InterruptedException {
JavaRDD<String> Data = sc.textFile("/path/to/File");
}
我想在应用程序的其他部分使用上面创建的RDD,我必须停止上下文,我需要创建另一个Context,并在那里使用上面的RDD。我的问题是,如果我坚持使用RDD,我将能够使用RDD吗?
Data.persist(StorageLevel.MEMORY_ONLY());
或者我必须坚持使用磁盘。
Data.persist(StorageLevel.DISK_ONLY());
答案 0 :(得分:4)
如果您需要重新启动Spark Context,则无法在任何一种情况下重用该RDD。持有RDD.persist
的内容无法在Spark上下文之外访问。每个RDD都与一个单独的Spark上下文绑定。
如果要停止上下文并开始新的上下文,请考虑使用RDD.saveAsTextFile("/saved/rdd/path")
之类的内容持久保存到基础数据存储区,然后使用sc.textFile("/saved/rdd/path")
在新的Spark上下文中读取新的RDD。