2016-12-12 63 views
0

我是Spark的新手。我有一個文件TrainDataSpark.java在我處理一些數據,並在它結束時,我用我救了我的火花處理的數據到一個目錄中稱爲預測下面的代碼如何在java代碼中讀取spark保存的文件

predictions.saveAsTextFile("Predictions"); 

在同一TrainDataSpark.java下面我列舉加代碼部分緊跟在上面的行之後。

OutputGeneratorOptimized ouputGenerator = new OutputGeneratorOptimized(); 
final Path predictionFilePath = Paths.get("/Predictions/part-00000"); 
final Path outputHtml = Paths.get("/outputHtml.html"); 
ouputGenerator.getFormattedHtml(input,predictionFilePath,outputHtml); 

而且我得到/ Predictions/part-00000的NoSuchFile異常。我嘗試了所有可能的路徑,但是失敗了。我認爲java代碼搜索我的本地系統上的文件而不是hdfs羣集。有沒有辦法從集羣獲取文件路徑,所以我可以通過它進一步?或者有沒有辦法將我的預測文件加載到本地而不是羣集,以便java部分運行時出錯錯誤?

+0

'? – mrsrinivas

+0

這僅僅是路徑/用戶/用戶名/預測/兼職00000 – ysg7790

+0

在調用'saveAsTextFile'後文件是否物理存在於'/ Predictions/part-00000'中? – Shem

回答

0

我琢磨出來什麼結果的`Paths.get(「/預測)這樣...

String predictionFilePath ="hdfs://pathToHDFS/user/username/Predictions/part-00000"; 
String outputHtml = "hdfs://pathToHDFS/user/username/outputHtml.html"; 

URI uriRead = URI.create(predictionFilePath); 
URI uriOut = URI.create(outputHtml); 

Configuration conf = new Configuration(); 

FileSystem fileRead = FileSystem.get (uriRead, conf); 
FileSystem fileWrite = FileSystem.get (uriOut, conf); 

FSDataInputStream in = fileRead.open(new org.apache.hadoop.fs.Path(uriRead)); 
FSDataOutputStream out = fileWrite.append(new org.apache.hadoop.fs.Path(uriOut)); 

/*Java code that uses stream objects to write and read*/ 
OutputGeneratorOptimized ouputGenerator = new OutputGeneratorOptimized(); 
ouputGenerator.getFormattedHtml(input,in,out); 
0

如果您在集羣上運行Spark,則會發生這種情況。 Paths.get分別在每個節點上查找本地文件系統中的文件,而它存在於hdfs上。您可以使用sc.textFile("hdfs:/Predictions")(或sc.textFile("Predictions"))加載文件。

另一方面,如果您想保存本地文件系統,則需要首先使用collect RDD並使用常規Java IO保存該文件系統。

相關問題