Partager via


Classe DataFrameWriter

Interface utilisée pour écrire un DataFrame dans des systèmes de stockage externes (par exemple, des systèmes de fichiers, des magasins clé-valeur, etc.).

Prend en charge Spark Connect

Syntaxe

Permet DataFrame.write d’accéder à cette interface.

Méthodes

Méthode Description
mode(saveMode) Spécifie le comportement quand des données ou une table existent déjà.
format(source) Spécifie la source de données de sortie sous-jacente.
option(key, value) Ajoute une option de sortie pour la source de données sous-jacente.
options(**options) Ajoute des options de sortie pour la source de données sous-jacente.
partitionBy(*cols) Partitionne la sortie par les colonnes données sur le système de fichiers.
bucketBy(numBuckets, col, *cols) Compartimente la sortie par les colonnes données.
sortBy(col, *cols) Trie la sortie dans chaque compartiment par les colonnes données sur le système de fichiers.
clusterBy(*cols) Clusters les données par les colonnes données pour optimiser les performances des requêtes.
save(path, format, mode, partitionBy, **options) Enregistre le contenu du DataFrame dans une source de données.
insertInto(tableName, overwrite) Insère le contenu du DataFrame dans la table spécifiée.
saveAsTable(name, format, mode, partitionBy, **options) Enregistre le contenu du DataFrame en tant que table spécifiée.
json(path, mode, compression, ...) Enregistre le contenu du DataFrame au format JSON au chemin d’accès spécifié.
parquet(path, mode, partitionBy, compression) Enregistre le contenu du DataFrame au format Parquet au chemin d’accès spécifié.
text(path, compression, lineSep) Enregistre le contenu du DataFrame dans un fichier texte au chemin d’accès spécifié.
csv(path, mode, compression, sep, ...) Enregistre le contenu du DataFrame au format CSV au chemin d’accès spécifié.
xml(path, rowTag, mode, ...) Enregistre le contenu du DataFrame au format XML au chemin d’accès spécifié.
orc(path, mode, partitionBy, compression) Enregistre le contenu du DataFrame au format ORC au chemin d’accès spécifié.
excel(path, mode, dataAddress, headerRows) Enregistre le contenu du DataFrame au format Excel au chemin d’accès spécifié.
jdbc(url, table, mode, properties) Enregistre le contenu du DataFrame dans une table de base de données externe via JDBC.

Modes d’enregistrement

La mode() méthode prend en charge les options suivantes :

  • append : ajoutez le contenu de ce DataFrame aux données existantes.
  • remplacer : remplacer les données existantes.
  • erreur ou errorifexists : lève une exception si les données existent déjà (valeur par défaut).
  • ignorer : ignorez silencieusement cette opération si des données existent déjà.

Exemples

Écriture dans différentes sources de données

# Access DataFrameWriter through DataFrame
df = spark.createDataFrame([{"name": "Alice", "age": 30}])
df.write

# Write to JSON file
df.write.json("path/to/output.json")

# Write to CSV file with options
df.write.option("header", "true").csv("path/to/output.csv")

# Write to Parquet file
df.write.parquet("path/to/output.parquet")

# Write to a table
df.write.saveAsTable("table_name")

Utilisation du format et de l’enregistrement

# Specify format explicitly
df.write.format("json").save("path/to/output.json")

# With options
df.write.format("csv") \
    .option("header", "true") \
    .option("compression", "gzip") \
    .save("path/to/output.csv")

Spécification du mode d’enregistrement

# Overwrite existing data
df.write.mode("overwrite").parquet("path/to/output.parquet")

# Append to existing data
df.write.mode("append").parquet("path/to/output.parquet")

# Ignore if data exists
df.write.mode("ignore").json("path/to/output.json")

# Error if data exists (default)
df.write.mode("error").csv("path/to/output.csv")

Partitionnement des données

# Partition by single column
df.write.partitionBy("year").parquet("path/to/output.parquet")

# Partition by multiple columns
df.write.partitionBy("year", "month").parquet("path/to/output.parquet")

# Partition with bucketing
df.write \
    .bucketBy(10, "id") \
    .sortBy("age") \
    .saveAsTable("bucketed_table")

Écriture dans JDBC

# Write to database table
df.write.jdbc(
    url="jdbc:postgresql://localhost:5432/mydb",
    table="users",
    mode="overwrite",
    properties={"user": "myuser", "password": "mypassword"}
)

Chaînage de méthodes

# Chain multiple configuration methods
df.write \
    .format("parquet") \
    .mode("overwrite") \
    .option("compression", "snappy") \
    .partitionBy("year", "month") \
    .save("path/to/output")

Écriture dans des tables

# Save as managed table
df.write.saveAsTable("my_table")

# Save as managed table with options
df.write \
    .mode("overwrite") \
    .format("parquet") \
    .partitionBy("year") \
    .saveAsTable("partitioned_table")

# Insert into existing table
df.write.insertInto("existing_table")

# Insert into existing table with overwrite
df.write.insertInto("existing_table", overwrite=True)