2016-03-04 49 views
1

我已經創建了一個RDD,下面是我的程序。如何在停止上下文後重用火花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,我不得不停止的背景下,我需要創建另一個上下文,並使用上述RDD那裏。我的問題是,如果堅持使用內存,我能否使用RDD?

Data.persist(StorageLevel.MEMORY_ONLY()); 

或者我必須堅持到磁盤。

Data.persist(StorageLevel.DISK_ONLY()); 

回答

3

如果您需要重新啓動Spark上下文,則在任何情況下都無法重用該RDD。在您的Spark上下文之外無法訪問RDD.persist。每個RDD都與特定的Spark上下文相關聯。

如果要停止上下文並啓動新的上下文,請考慮使用類似RDD.saveAsTextFile("/saved/rdd/path")的方法持久保留底層數據存儲,然後使用sc.textFile("/saved/rdd/path")在新的Spark上下文中讀取新的RDD。