Classe DataFrameWriterV2
Interface utilisée pour écrire un DataFrame dans un stockage externe à l'aide de l'API v2.
Pour la plupart des cas d'utilisation avec les tables Databricks et Delta Lake, DataFrameWriterV2 offre des options plus puissantes et flexibles que le DataFrameWriter original :
- Meilleure prise en charge des propriétés de table
- Un contrôle plus précis sur le partitionnement
- Fonctionnalités de remplacement conditionnel
- Prise en charge du clustering
- Sémantique plus claire pour les opérations de création ou de remplacement
Prend en charge Spark Connect
Syntaxe
Utilisez DataFrame.writeTo(table) pour accéder à cette interface.
Méthodes
Méthode | Description |
|---|---|
Spécifie un fournisseur pour la source de données de sortie sous-jacente. | |
Ajoutez une option d'écriture. Par exemple, pour créer une table gérée : | |
Ajoutez des options d'écriture. | |
Ajouter une propriété de table. Par exemple, utilisez | |
Partitionnez la table de sortie créée par create, createOrReplace ou replace à l'aide des colonnes ou transformations données. | |
Clusters les données par les colonnes données pour optimiser les performances des queries. | |
Créez une nouvelle table à partir du contenu du dataframe. | |
Remplacez une table existante par le contenu du DataFrame. | |
Créer une nouvelle table ou remplacer une table existante avec le contenu du cadre de données. | |
Ajoutez le contenu du dataframe à la table de sortie. | |
Écrasez les lignes correspondant à la condition de filtre donnée avec le contenu du dataframe dans la table de sortie. | |
Écrasez toutes les partitions pour lesquelles le cadre de données contient au moins une ligne avec le contenu du cadre de données dans la table de sortie. |
Exemples
Création d'une nouvelle table
# Create a new table with DataFrame contents
df = spark.createDataFrame([{"name": "Alice", "age": 30}])
df.writeTo("my_table").create()
# Create with a specific provider
df.writeTo("my_table").using("parquet").create()
Partitionnement des données
# Partition by single column
df.writeTo("my_table") \
.partitionedBy("year") \
.create()
# Partition by multiple columns
df.writeTo("my_table") \
.partitionedBy("year", "month") \
.create()
# Partition using transform functions
from pyspark.sql.functions import years, months, days
df.writeTo("my_table") \
.partitionedBy(years("date"), months("date")) \
.create()
Configuration des propriétés de la table
# Add table properties
df.writeTo("my_table") \
.tableProperty("key1", "value1") \
.tableProperty("key2", "value2") \
.create()
Utilisation des options
# Add write options
df.writeTo("my_table") \
.option("compression", "snappy") \
.option("maxRecordsPerFile", "10000") \
.create()
# Add multiple options at once
df.writeTo("my_table") \
.options(compression="snappy", maxRecordsPerFile="10000") \
.create()
Regroupement des données
# Cluster by columns for query optimization
df.writeTo("my_table") \
.clusterBy("user_id", "timestamp") \
.create()
Opérations de remplacement
# Replace existing table
df.writeTo("my_table") \
.using("parquet") \
.replace()
# Create or replace (safe operation)
df.writeTo("my_table") \
.using("parquet") \
.createOrReplace()
Opérations d'ajout
# Append to existing table
df.writeTo("my_table").append()
Opérations de remplacement
from pyspark.sql.functions import col
# Overwrite specific rows based on condition
df.writeTo("my_table") \
.overwrite(col("date") == "2025-01-01")
# Overwrite entire partitions
df.writeTo("my_table") \
.overwritePartitions()
Chaînage de méthodes
# Combine multiple configurations
df.writeTo("my_table") \
.using("parquet") \
.option("compression", "snappy") \
.tableProperty("description", "User data table") \
.partitionedBy("year", "month") \
.clusterBy("user_id") \
.createOrReplace()