Share via


DataFrameWriterV2-klasse

Interface die wordt gebruikt om een DataFrame naar externe opslag te schrijven met behulp van de v2-API.

Voor de meeste gebruiksvoorbeelden met Databricks-tabellen en Delta Lake biedt DataFrameWriterV2 krachtigere en flexibele opties dan de oorspronkelijke DataFrameWriter:

  • Betere ondersteuning voor tabeleigenschappen
  • Meer verfijnde controle over partitionering
  • Mogelijkheden voor voorwaardelijke overschrijven
  • Ondersteuning voor clustering
  • Duidelijkere semantiek voor het maken of vervangen van bewerkingen

Ondersteunt Spark Connect

Syntaxis

Gebruik DataFrame.writeTo(table) deze interface om toegang te krijgen tot deze interface.

Methods

Methode Beschrijving
using(provider) Hiermee geeft u een provider voor de onderliggende uitvoergegevensbron.
option(key, value) Voeg een schrijfoptie toe. Als u bijvoorbeeld een beheerde tabel wilt maken: df.writeTo("test").using("delta").option("path", "s3://test").createOrReplace().
options(**options) Schrijfopties toevoegen.
tableProperty(property, value) Tabeleigenschap toevoegen. Gebruik bijvoorbeeld tableProperty("location", "s3://test") om een externe tabel (niet-beheerd) te maken.
partitionedBy(col, *cols) Partitioneer de uitvoertabel die is gemaakt door create, createOrReplace of vervang deze met behulp van de opgegeven kolommen of transformaties.
clusterBy(col, *cols) Hiermee worden de gegevens geclusterd op basis van de opgegeven kolommen om de queryprestaties te optimaliseren.
create() Maak een nieuwe tabel op basis van de inhoud van het gegevensframe.
replace() Vervang een bestaande tabel door de inhoud van het gegevensframe.
createOrReplace() Maak een nieuwe tabel of vervang een bestaande tabel door de inhoud van het gegevensframe.
append() Voeg de inhoud van het gegevensframe toe aan de uitvoertabel.
overwrite(condition) Overschrijf rijen die overeenkomen met de opgegeven filtervoorwaarde met de inhoud van het gegevensframe in de uitvoertabel.
overwritePartitions() Overschrijf alle partities waarvoor het gegevensframe ten minste één rij bevat met de inhoud van het gegevensframe in de uitvoertabel.

Examples

Een nieuwe tabel maken

# 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()

Gegevens partitioneren

# 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()

Tabeleigenschappen instellen

# Add table properties
df.writeTo("my_table") \
    .tableProperty("key1", "value1") \
    .tableProperty("key2", "value2") \
    .create()

Opties gebruiken

# 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()

Clusteringgegevens

# Cluster by columns for query optimization
df.writeTo("my_table") \
    .clusterBy("user_id", "timestamp") \
    .create()

Vervangingsoperaties

# Replace existing table
df.writeTo("my_table") \
    .using("parquet") \
    .replace()

# Create or replace (safe operation)
df.writeTo("my_table") \
    .using("parquet") \
    .createOrReplace()

Toevoegbewerkingen

# Append to existing table
df.writeTo("my_table").append()

Bewerkingen overschrijven

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()

Methodekoppeling

# Combine multiple configurations
df.writeTo("my_table") \
    .using("parquet") \
    .option("compression", "snappy") \
    .tableProperty("description", "User data table") \
    .partitionedBy("year", "month") \
    .clusterBy("user_id") \
    .createOrReplace()