2016-08-11 7 views
5

この質問は以前に尋ねられたことがわかりましたが、明確な作業の回答を得ることができません。出力は、「パート00」の名前で保存されているsaveAsTextFile火花を使用した場合スパーク出力ファイル名と書き込み時に追加する

result.saveAsTextFile(path); 
  1. など「パート01」 は、それがカスタマイズされた名前に、この名前を変更することは可能ですか?

  2. saveAsTextFileは、既存のファイルに上書きするのではなく、既存のファイルに追加することはできますか?

I)は、出力ファイルシステムがクラウド(アズール、AWS)

+0

ファイルが分割されているのが仕様です。あなたはいつもそれらを単一のファイルにマージすることができますhttp://stackoverflow.com/questions/5700068/merge-output-files-after-reduce-phase – Aravind

+0

あなたはカスタムOutputFormatで行うことができますが、かなりの努力。ファイル名は、ファイル書き込みシステムの深いところから来ます。ファイル名をそのまま受け入れることをお勧めします。ファイルにアクセスするには、sc.textFile(filepath)を実行します。それは動作します。分割したパーティションを1つのファイルにマージするには、結合を使用できます。 –

+0

ありがとう、ファイルに追加するコメント – duck

答えて

0

1になり、符号化のためのJava 7を使用していたファイルの出力名を制御するsaveAsTextFile方法では直接サポートはありません。 saveAsHadoopDatasetを使用して、出力ファイルbasenameを制御できます。

例:part-00000ではなく、yourCustomName-00000を取得できます。

このメソッドを使用してサフィックス00000を制御することはできません。これは、各パーティションが一意のファイルに書き込むように、書き込み中に自動的に各パーティションに割り当てられるものです。

上記のコメントのように、独自のカスタム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機能を使用することです。

関連する問題