2016-03-22 4 views
3

Ich versuche, eine RDD in eine Textdatei zu speichern. Meine Instanz von Spark auf Linux und mit Azure Blob läuftSpark saveAsTextFile zu Azure Blob erstellt einen Blob anstelle einer Textdatei

val rdd = sc.textFile("wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv") 

//find the rows which have only one digit in the 7th column in the CSV 
val rdd1 = rdd.filter(s => s.split(",")(6).length() == 1) 

rdd1.saveAsTextFile("wasb:///HVACOut") 

Als ich am Ausgang betrachte, ist es nicht als eine einzelne Textdatei, sondern als eine Reihe von Application/Octet-Stream-Dateien in einem Ordner namens HVACOut.

Wie kann ich es stattdessen als einzelne Textdatei ausgeben?

Antwort

1

Nun, ich bin nicht sicher, dass Sie nur eine Datei ohne Verzeichnis erhalten können. Wenn Sie

rdd1 .coalesce(1).saveAsTextFile("wasb:///HVACOut") 

tun, werden Sie eine Datei in einem Verzeichnis erhalten namens „HVACOut“ die Datei sollte so etwas wie Teil-00001 mögen. Dies liegt daran, dass Ihre Rdd in Ihrem Cluster mit Partitionen gestört wird. Wenn Sie einen Speicheraufruf ausführen (alle Speicherfunktionen), wird eine Datei pro Partition erstellt. Also, bei Anruf koaleszieren Sie (1), dass Sie 1 Partition wünschen.

Hoffe, das hilft.

+0

Ich habe das versucht, es erstellt eine Datei, aber es ist keine Textdatei. Es ist immer noch nur eine Anwendung/Octet-Stream-Datei in einem Ordner namens HVACOut. Unabhängig davon wurde eine HVACOut.txt-Datei mit 0 Byte erstellt – Mark

0

Nach Bereitstellung eines Apache Spark-Cluster fertig auf Azure HDInsight, können Sie auf die bei Jupyter Notebook für den Cluster built-in gehen: https://YOURCLUSTERNAME.azurehdinsight.net/jupyter.

Dort finden Sie Beispiel Notebook mit Beispiel dazu.

Speziell für scala, können Sie auf das Notebook namens "02 - Lesen und Schreiben von Daten von Azure Storage Blobs (WASB) (Scala)".

Kopieren einige der Code und Kommentare hier:

Hinweis:

Da CSV nicht nativ von Spark unterstützt, so gibt es keine integrierte Möglichkeit, eine RDD in eine CSV-Datei zu schreiben . Sie können dies jedoch umgehen, wenn Sie Ihre Daten als CSV-Datei speichern möchten. Code:

csvFile.map((line) => line.mkString(",")).saveAsTextFile("wasb:///example/data/HVAC2sc.csv") 

hoffe, das hilft!