2016-08-11 20 views
5

Wiem, że to pytanie zostało zadane wcześniej, ale nie mogę uzyskać jasnej działającej odpowiedzi.Wyjściowa nazwa pliku wyjściowego i dołączenie do zapisu

result.saveAsTextFile(path); 
  1. przy użyciu iskry saveAsTextFile wyjście jest zapisany pod nazwą „part-00”, „część-01” itd Czy jest możliwe, aby zmienić tę nazwę na niestandardowej nazwy?

  2. Czy można zapisać plik saveAsTextFile w istniejącym pliku, a następnie go nadpisać?

używam Java 7 dla kodowania, system plik wyjściowy będzie cloud (Azure AWS)

+0

Z założenia pliki są podzielone. zawsze możesz połączyć je w jeden plik http://stackoverflow.com/questions/5700068/merge-output-files-after-reduce-phase – Aravind

+0

Możesz to zrobić za pomocą niestandardowego OutputFormat, ale będzie to całkiem sporo wysiłek. Nazwy plików pochodzą z głębi systemu zapisu plików. Sugerowałbym, żebyś po prostu zaakceptował nazwy plików takimi, jakie są. Aby uzyskać dostęp do pliku, możesz zrobić plik sc.textFile (ścieżka do pliku). To zadziała. Aby scalić te partycje podzielone na pojedynczy plik, możesz użyć koalescji. –

+0

Dzięki, wszelkie komentarze do pliku – duck

Odpowiedz

0

1) Nie ma bezpośredniego wsparcia w metodzie saveAsTextFile kontrolowania nazwy pliku wyjściowego. Możesz spróbować użyć metody saveAsHadoopDataset do sterowania plikiem wyjściowym w postaci pliku.

np .: zamiast części-00000 można uzyskać swójKustomName-00000.

Należy pamiętać, że nie można kontrolować przyrostka 00000 za pomocą tej metody. Jest to iskra automatycznie przypisywana każdej partycji podczas pisania, tak aby każda partycja zapisywała się w unikalnym pliku.

Aby kontrolować to, jak wspomniano powyżej w komentarzach, należy napisać własny niestandardowy 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) Rozwiązaniem byłoby napisać wyjścia, jak to jest do położenia wyjściowego i używać Hadoop FileUtil.copyMerge funkcję do utworzenia połączonego pliku.

Powiązane problemy