DataFrameWriterV2 – třída

Rozhraní používané k zápisu datového rámce do externího úložiště pomocí rozhraní API v2

Pro většinu případů použití s tabulkami Databricks a Delta Lake poskytuje DataFrameWriterV2 výkonnější a flexibilnější možnosti než původní Objekt DataFrameWriter:

  • Lepší podpora vlastností tabulky
  • Podrobnější kontrola nad dělením
  • Možnosti podmíněného přepsání
  • Podpora clusteringu
  • Jasnější sémantika pro operace vytvoření nebo nahrazení

Podporuje Spark Connect.

Syntaxe

Používá DataFrame.writeTo(table) se pro přístup k tomuto rozhraní.

Methods

Metoda Description
using(provider) Určuje zprostředkovatele pro podkladový výstupní zdroj dat.
option(key, value) Přidání možnosti zápisu Chcete-li například vytvořit spravovanou tabulku: df.writeTo("test").using("delta").option("path", "s3://test").createOrReplace().
options(**options) Přidání možností zápisu
tableProperty(property, value) Přidat vlastnost tabulky Slouží tableProperty("location", "s3://test") například k vytvoření tabulky EXTERNAL (nespravované).
partitionedBy(col, *cols) Rozdělte výstupní tabulku vytvořenou vytvořením, createOrReplace nebo nahraďte pomocí daných sloupců nebo transformací.
clusterBy(col, *cols) Seskupí data podle daných sloupců za účelem optimalizace výkonu dotazů.
create() Vytvořte novou tabulku z obsahu datového rámce.
replace() Nahraďte existující tabulku obsahem datového rámce.
createOrReplace() Vytvořte novou tabulku nebo nahraďte existující tabulku obsahem datového rámce.
append() Připojte obsah datového rámce k výstupní tabulce.
overwrite(condition) Přepište řádky odpovídající dané podmínce filtru s obsahem datového rámce ve výstupní tabulce.
overwritePartitions() Přepište všechny oddíly, pro které datový rámec obsahuje alespoň jeden řádek s obsahem datového rámce ve výstupní tabulce.

Příklady

Vytvoření nové tabulky

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

Dělení dat

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

Nastavení vlastností tabulky

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

Použití možností

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

Data clusteringu

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

Operace nahrazení

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

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

Operace připojení

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

Přepsání operací

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

Řetězení metod

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