5
我知道這個問題已被問過,但我無法得到一個明確的工作答案。Spark輸出文件名並追加寫入
result.saveAsTextFile(path);
使用火花時saveAsTextFile輸出由「部分00」的名稱保存,「部分-01」等 是否有可能改變這一名稱自定義名稱?
是否可以將saveAsTextFile附加到現有文件而不是覆蓋它?
我使用Java 7的編碼,輸出文件系統將是雲(天青,AWS)
我知道這個問題已被問過,但我無法得到一個明確的工作答案。Spark輸出文件名並追加寫入
result.saveAsTextFile(path);
使用火花時saveAsTextFile輸出由「部分00」的名稱保存,「部分-01」等 是否有可能改變這一名稱自定義名稱?
是否可以將saveAsTextFile附加到現有文件而不是覆蓋它?
我使用Java 7的編碼,輸出文件系統將是雲(天青,AWS)
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功能,形成合並的文件。
在設計上文件是分開的。你可以隨時將它們合併到一個單一的文件http://stackoverflow.com/questions/5700068/merge-output-files-after-reduce-phase – Aravind
你可以用一個自定義的OutputFormat來做到這點,但它會有一點點努力。文件名稱來自文件寫入系統的深處。我建議你只接受文件名稱。要訪問該文件,您可以執行sc.textFile(filepath)。那可行。要將這些分區合併爲一個文件,您可以使用合併。 –
謝謝,任何意見追加到文件 – duck