Angenommen, df
ist ein Datenrahmen in Spark. Die Möglichkeit, df
in eine einzelne CSV-Datei zu schreiben, ist
df.coalesce(1).write.option("header", "true").csv("name.csv")
Dadurch wird der Datenrahmen in eine CSV-Datei geschrieben, die sich in einem Ordner mit dem Namen name.csv
befindet. Die eigentliche CSV-Datei wird jedoch als part-00000-af091215-57c0-45c4-a521-cd7d9afb5e54.csv
bezeichnet.
Ich würde gerne wissen, ob es möglich ist, den Ordner name.csv
zu umgehen und die eigentliche CSV-Datei mit dem Namen name.csv
und nicht part-00000-af091215-57c0-45c4-a521-cd7d9afb5e54.csv
zu haben. Der Grund dafür ist, dass ich mehrere CSV-Dateien schreiben muss, die ich später in Python zusammen lesen werde, aber mein Python-Code verwendet die tatsächlichen CSV-Namen und muss auch alle einzelnen CSV-Dateien in einem Ordner (und nicht in einem Ordner) haben von Ordnern).
Jede Hilfe wird geschätzt.
Eine mögliche Lösung könnte sein, den Spark-Datenrahmen in einen Pandas-Datenrahmen zu konvertieren und als csv zu speichern:
df.toPandas().to_csv("<path>/<filename>")
Es gibt keine Dataframe-Spark-API, die als Ergebnis einer Schreiboperation eine einzelne Datei anstelle eines Verzeichnisses schreibt/erstellt.
Unter beiden Optionen wird eine einzige Datei innerhalb des Verzeichnisses zusammen mit Standarddateien (_SUCCESS, _committed, _started) erstellt.
df.coalesce (1) .write.mode ("overwrite"). format ("com.databricks.spark.csv"). Option ("header", "true"). csv ("PATH/FOLDER_NAME/x.csv ")
df.repartition (1) .write.mode ("overwrite"). format ("com.databricks.spark.csv"). Option ("header", "true"). csv ("PATH/FOLDER_NAME/x.csv ")
Wenn Sie nicht coalesce (1) oder repartition (1) verwenden und die Funkenparallelität zum Schreiben von Dateien nutzen, werden mehrere Datendateien im Verzeichnis erstellt.
Sie müssen eine Funktion im Treiber schreiben, die alle Datendatei-Teile zu einer einzigen Datei (cat part-00000 * singlefilename) zusammenfasst, sobald der Schreibvorgang abgeschlossen ist.