Condividi tramite


Classe DataFrameWriterV2

Interfaccia usata per scrivere un dataframe in una risorsa di archiviazione esterna usando l'API v2.

Per la maggior parte dei casi d'uso con le tabelle di Databricks e Delta Lake, DataFrameWriterV2 offre opzioni più potenti e flessibili rispetto all'originale DataFrameWriter:

  • Supporto migliore per le proprietà di tabella
  • Maggiore controllo granulare sul partizionamento
  • Funzionalità di sovrascrittura condizionale
  • Supporto per il clustering
  • Semantica più chiara per le operazioni di creazione o sostituzione

Supporta Spark Connect

Sintassi

Usare DataFrame.writeTo(table) per accedere a questa interfaccia.

Methods

metodo Descrizione
using(provider) Specifica un provider per l'origine dati di output sottostante.
option(key, value) Aggiungere un'opzione di scrittura. Ad esempio, per creare una tabella gestita: df.writeTo("test").using("delta").option("path", "s3://test").createOrReplace().
options(**options) Aggiungere opzioni di scrittura.
tableProperty(property, value) Aggiungere la proprietà della tabella. Ad esempio, usare tableProperty("location", "s3://test") per creare una tabella EXTERNAL (non gestita).
partitionedBy(col, *cols) Partizionare la tabella di output creata da create, createOrReplace o sostituire usando le colonne o le trasformazioni specificate.
clusterBy(col, *cols) Raggruppa i dati in base alle colonne specificate per ottimizzare le prestazioni delle query.
create() Creare una nuova tabella dal contenuto del frame di dati.
replace() Sostituire una tabella esistente con il contenuto del frame di dati.
createOrReplace() Creare una nuova tabella o sostituire una tabella esistente con il contenuto del frame di dati.
append() Aggiungere il contenuto del frame di dati alla tabella di output.
overwrite(condition) Sovrascrivere righe corrispondenti alla condizione di filtro specificata con il contenuto del frame di dati nella tabella di output.
overwritePartitions() Sovrascrivere tutte le partizioni per le quali il frame di dati contiene almeno una riga con il contenuto del frame di dati nella tabella di output.

Examples

Creazione di una nuova tabella

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

Partizionamento dei dati

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

Impostazione delle proprietà della tabella

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

Uso delle opzioni

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

Dati di clustering

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

Sostituire le operazioni

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

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

Operazioni di accodamento

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

Sovrascrivere le operazioni

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

Concatenamento dei metodi

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