Kelas DataFrameWriterV2

Antarmuka yang digunakan untuk menulis DataFrame ke penyimpanan eksternal menggunakan API v2.

Untuk sebagian besar kasus penggunaan dengan tabel Databricks dan Delta Lake, DataFrameWriterV2 menyediakan opsi yang lebih kuat dan fleksibel daripada DataFrameWriter asli:

  • Dukungan properti tabel yang lebih baik
  • Kontrol yang lebih halus atas partisi
  • Kemampuan penimpaan bersyarkat
  • Dukungan untuk pengklusteran
  • Semantik yang lebih jelas untuk membuat atau mengganti operasi

Mendukung Spark Connect

Sintaksis

Gunakan DataFrame.writeTo(table) untuk mengakses antarmuka ini.

Metode

Metode Deskripsi
using(provider) Menentukan penyedia untuk sumber data output yang mendasar.
option(key, value) Tambahkan opsi tulis. Misalnya, untuk membuat tabel terkelola: df.writeTo("test").using("delta").option("path", "s3://test").createOrReplace().
options(**options) Tambahkan opsi tulis.
tableProperty(property, value) Tambahkan properti tabel. Misalnya, gunakan tableProperty("location", "s3://test") untuk membuat tabel EXTERNAL (tidak terkelola).
partitionedBy(col, *cols) Partisi tabel output yang dibuat dengan membuat, createOrReplace, atau mengganti menggunakan kolom atau transformasi yang diberikan.
clusterBy(col, *cols) Kluster data menurut kolom yang diberikan untuk mengoptimalkan performa kueri.
create() Buat tabel baru dari konten bingkai data.
replace() Ganti tabel yang sudah ada dengan konten bingkai data.
createOrReplace() Buat tabel baru atau ganti tabel yang sudah ada dengan konten bingkai data.
append() Tambahkan konten bingkai data ke tabel output.
overwrite(condition) Timpa baris yang cocok dengan kondisi filter yang diberikan dengan konten bingkai data dalam tabel output.
overwritePartitions() Timpa semua partisi yang bingkai datanya berisi setidaknya satu baris dengan konten bingkai data dalam tabel output.

Examples

Membuat tabel baru

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

Mempartisi data

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

Mengatur properti tabel

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

Menggunakan opsi

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

Pengklusteran data

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

Ganti operasi

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

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

Menambahkan operasi

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

Timpa operasi

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

Penautan metode

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