2016-08-11 30 views
5

我知道這個問題已被問過,但我無法得到一個明確的工作答案。Spark輸出文件名並追加寫入

result.saveAsTextFile(path); 
  1. 使用火花時saveAsTextFile輸出由「部分00」的名稱保存,「部分-01」等 是否有可能改變這一名稱自定義名稱?

  2. 是否可以將saveAsTextFile附加到現有文件而不是覆蓋它?

我使用Java 7的編碼,輸出文件系統將是雲(天青,AWS)

+0

在設計上文件是分開的。你可以隨時將它們合併到一個單一的文件http://stackoverflow.com/questions/5700068/merge-output-files-after-reduce-phase – Aravind

+0

你可以用一個自定義的OutputFormat來做到這點,但它會有一點點努力。文件名稱來自文件寫入系統的深處。我建議你只接受文件名稱。要訪問該文件,您可以執行sc.textFile(filepath)。那可行。要將這些分區合併爲一個文件,您可以使用合併。 –

+0

謝謝,任何意見追加到文件 – duck

回答

0

1)在saveAsTextFile方法來控制輸出文件名中沒有直接的支持。 您可以嘗試使用saveAsHadoopDataset來控制輸出文件基本名稱。

例如:代替part-00000,您可以獲得yourCustomName-00000。

請記住,您無法使用此方法控制後綴00000。這是Spark在寫入時爲每個分區自動分配的內容,以便每個分區寫入唯一文件。

爲了控制,如上所述在評論中你必須編寫自己的自定義OutputFormat。

SparkConf conf=new SparkConf(); 
conf.setMaster("local").setAppName("yello"); 
JavaSparkContext sc=new JavaSparkContext(conf); 

JobConf jobConf=new JobConf(); 
jobConf.set("mapreduce.output.basename", "customName"); 
jobConf.set("mapred.output.dir", "outputPath"); 

JavaRDD<String> input = sc.textFile("inputDir"); 
input.saveAsHadoopDataset(jobConf); 

2)一種解決方法是寫輸出,因爲它是你的輸出位置,並使用Hadoop FileUtil.copyMerge功能,形成合並的文件。

相關問題