Fermer

mars 7, 2024

Écrire dans des fichiers / Blogs / Perficient

Écrire dans des fichiers / Blogs / Perficient


Cet article de blog explique comment écrire Spark DataFrame dans différents formats de fichiers pour enregistrer des données sur un stockage externe à des fins d’analyse ou de partage plus approfondis.

Avant de plonger dans ce blog, jetez un œil à mes autres articles de blog traitant de la création du DataFrame et de la manipulation du DataFrame ainsi que de l’écriture d’un DataFrame dans des tables et des vues.

Base de données:

Vous trouverez ci-dessous l’ensemble de données que nous utiliserons pour rechercher l’écriture dans un fichier à partir de DataFrame.

Base de données

Écriture de Spark DataFrame dans un fichier :

Format CSV :

Vous trouverez ci-dessous la syntaxe pour écrire un Spark DataFrame dans un csv.

df.write.csv("output_path")

Passons en revue l’écriture du DataFrame to File à l’aide d’exemples et de scénarios.

Exemple:

L’instantané ci-dessous est un exemple d’écriture d’un DataFrame dans un fichier.

Spark DataFrame Write to File - Afficher à partir du chemin

Après avoir écrit le DataFrame dans le chemin, les fichiers du chemin sont affichés. Les fichiers de pièce affichés sont ceux dans lesquels les données sont chargées. Databricks a automatiquement partitionné chaque ligne dans un fichier et a créé un fichier pour toutes les lignes. Nous pouvons répartir et créer un seul fichier à partir du DataFrame.

DataFrame Repartition:

Spark DataFrame Write into CSV - Affichage à partir de la répartition du chemin

Après le repartitionnement, nous observons que tous les fichiers pièces se combinent en un seul fichier, et nous remarquons d’autres fichiers en plus des fichiers pièces, que nous pouvons ignorer lors de la création en utilisant certaines configurations Spark ci-dessous. Ces fichiers seront créés même lors de l’écriture des données dans d’autres formats de fichiers plutôt que CSV.

Suppression des fichiers _commit et _started :

Nous pouvons utiliser la configuration Spark ci-dessous qui ne créera pas les fichiers commençant par _commited et _started. =

spark.conf.set("spark.sql.sources.commitProtocolClass", "org.apache.spark.sql.execution.datasources.SQLHadoopMapReduceCommitProtocol")

Spark DataFrame Write to File - Affichage à partir du protocole de validation de chemin

Suppression du fichier _SUCCESS :

Nous pouvons utiliser la configuration Spark ci-dessous pour empêcher la génération du fichier _SUCCESS.

spark.conf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")

Spark DataFrame Write to File - Afficher à partir du chemin d'accès pour réussir les tâches

Données dans le fichier :

Une fois tous les fichiers supplémentaires supprimés, nous pouvons voir les données présentes dans ce qui est chargé dans le fichier. Nous pouvons remarquer que par défaut, Spark n’écrit pas d’en-tête dans les fichiers, nous pouvons les modifier en utilisant option/options. De plus, voyons les options disponibles lors de l’écriture d’un DataFrame dans un fichier.

Sortie du fichier

Option d’en-tête :

Écriture de trame de données avec en-tête

En ajoutant l’option header, on observe que l’en-tête est renseigné dans le fichier. De même, nous avons la possibilité de modifier le délimiteur.

Option de délimiteur :

Écriture de trame de données avec délimiteur

Nous pouvons modifier le délimiteur au format souhaité en ajoutant l’option supplémentaire – délimiteur ou nous pouvons également utiliser sep (syntaxe fournie ci-dessous).

df.write.option("header","true").option("sep","|").mode("overwrite").csv("dbfs:/FileStore/df_write/")

Option valeur nulle :

D’après la sortie précédente, nous pouvons remarquer que la capitale des Tonga dans le DataFrame est nulle, bien que dans le CSV, elle aurait été renseignée comme vide. Nous pouvons le conserver comme nul en utilisant l’option nullValue.

Écriture de trame de données avec une valeur nulle

Avec cette option, on observe que null est conservé.

Option valeur vide :

Dans certains scénarios, nous devrons peut-être renseigner null pour les valeurs vides. Dans ce cas, nous pouvons utiliser l’option ci-dessous.

Écrire une trame de données avec une valeur vide

À partir du résultat ci-dessus, nous observons que le Danemark avait auparavant une valeur vide renseignée pour sa capitale, mais qu’elle est désormais renseignée avec null.

Option ignoreLeadingWhiteSpaces et ignoreTrailingWhiteSpaces :

Si nous devons conserver les espaces avant ou après la valeur dans une colonne, nous pouvons utiliser les options ci-dessous.

Écriture de trame de données avec Ignoreleadtrail

Différente manière d’utiliser plusieurs options :

Nous pouvons avoir toutes les options pour le format de fichier dans une variable commune, puis l’utiliser chaque fois que nécessaire si nous devons utiliser le même ensemble d’options pour plusieurs fichiers.

Écriture de trames de données avec plusieurs options

Nous avons créé une variable writeOptions de type Map qui contient les options stockées et nous pouvons l’utiliser chaque fois que nous avons besoin de cette option de sortie.

Format JSON :

Nous pouvons utiliser la syntaxe et le format ci-dessous pour écrire dans un fichier JSON à partir du DataFrame.

Écrire une trame de données avec Json

Autres formats :

Format ORC :

Vous trouverez ci-dessous la syntaxe pour écrire le DataFrame au format ORC :

df.write.mode("overwrite").orc("dbfs:/FileStore/df_write/")

Format du parquet :

Vous trouverez ci-dessous la syntaxe pour écrire le DataFrame au format ORC :

df.write.mode("overwrite").parquet("dbfs:/FileStore/df_write/")

Semblable à ce qui précède, il existe plusieurs autres formats et exemples ainsi que des syntaxes que vous pouvez référencer à partir des liens ci-dessous.

Dans cet article de blog, nous avons abordé les bases de l’écriture de Spark DataFrame dans différents formats de fichiers. En fonction de vos besoins spécifiques et de vos cas d’utilisation, vous pouvez choisir le format de fichier et les options de configuration appropriés pour optimiser les performances et la compatibilité.






Source link