web-dev-qa-db-fra.com

Spark - Comment écrire un seul fichier csv SANS dossier?

Supposons que df soit une image de données dans Spark. La façon d'écrire df dans un seul fichier CSV est

df.coalesce(1).write.option("header", "true").csv("name.csv")

Cela écrira le cadre de données dans un fichier CSV contenu dans un dossier appelé name.csv, mais le fichier CSV réel s'appellera quelque chose comme part-00000-af091215-57c0-45c4-a521-cd7d9afb5e54.csv.

Je voudrais savoir s’il est possible d’éviter le dossier name.csv et d’avoir le fichier CSV réel appelé name.csv et non part-00000-af091215-57c0-45c4-a521-cd7d9afb5e54.csv. La raison est que j’ai besoin d’écrire plusieurs fichiers CSV que je lirai plus tard ensemble en Python, mais mon code Python utilise les noms CSV réels et doit également avoir tous les fichiers CSV uniques dans un dossier (et non un dossier). des dossiers).

Toute aide est appréciée.

8
antonioACR1

Une solution possible pourrait être de convertir le cadre de données Spark en un cadre de données pandas et de le sauvegarder au format csv:

df.toPandas().to_csv("<path>/<filename>")
2
Paul Vbl

Il n’existe pas d’API spark Dataframe permettant d’écrire/de créer un fichier unique au lieu d’un répertoire à la suite d’une opération d’écriture.

Sous les deux options, un seul fichier dans le répertoire est créé avec les fichiers standard (_SUCCESS, _committed, _started).

  1. df.coalesce (1) .write.mode ("écraser"). format ("com.databricks.spark.csv"). option ("en-tête", "true"). csv ("PATH/FOLDER_NAME/x.csv ") 

  2. df.repartition (1) .write.mode ("écraser"). format ("com.databricks.spark.csv"). option ("en-tête", "true"). csv ("PATH/FOLDER_NAME/x.csv ")

Si vous n'utilisez ni coalesce (1) ni repartition (1) et ne tirez pas parti du parallélisme des étincelles pour écrire des fichiers, il créera plusieurs fichiers de données dans le même répertoire.

Vous devez écrire une fonction dans le pilote qui combine toutes les parties de fichier de données dans un seul fichier (cat part-00000 * singlefilename) une fois l'opération d'écriture effectuée.

0
Ravi