2016-03-19 9 views
0

Ich versuche, eine RDD vom Typ org.apache.spark.rdd.RDD[((String, String), Int)] = MapPartitionsRDD[21] in eine Datei zu schreiben:Speichern RDD in Dateien

Ich habe meine RDD durch diesen Code:

val res = motList2.cartesian(motList2).map { case (x, y) => 
((x._1, y._1), x._2 + y._2) 
} 

val dir = "H:\\procjet-results" 
res.saveAsTextFile(dir) 

motList2 kann etwas sein wie:

motList2=List((("Chicken","Pasta"),2), ("Chicken","robot"),3) ...) 

Aber ich habe immer eine Ausnahme

org.apache.hadoop.mapred.FileAlreadyExistsException 

Ich habe überprüft, der Ordner ist erstellt, aber alle Dateien sind leer.

Antwort

0

Da die Ausnahme "org.apache.hadoop.mapred.FileAlreadyExistsException" lautet, liegt der Grund für den Fehlschlag Ihres Jobs darin, dass das Verzeichnis/die Datei, in der Sie schreiben möchten, bereits existiert. Wenn Sie vorher Erfahrungen mit Hadoop hatten. Das ist das gleiche Problem. Spark überschreibt standardmäßig nicht den Speicherort, an dem Sie Ihre Ergebnisse speichern möchten. Wenn Sie bereits dort sind, müssen Sie ihn zuerst manuell oder in Ihrem Code löschen.

+0

Eigentlich habe ich den Ordner entfernt, aber ich habe immer noch den gleichen Fehler. Hadoop erstellt einen Ordner mit leeren Dateien darin. Starten Sie dann eine Ausnahme – MarcelRitos

+0

Scheint ein bisschen seltsam. Ein Grund, warum Spark leere Dateien erstellt, könnte sein, dass für einige Schlüssel leere Partitionen vorhanden sind. Haben Sie versucht zu sehen, ob etwas in "res" ist, bevor Sie das Ergebnis auf die Festplatte schreiben? Wenn Sie eine IDE verwenden, können Sie Ihren Spark-Code einfach lokal im Debug-Modus ausführen. – PinoSan

0

Sie sollten das Präfix file: // verwenden, damit sich die URL auf der sicheren Seite befindet, sehr oft ist hdfs der Standard, in dem es versucht, die Datei zu speichern.