Partekatu honen bidez:


Clase DataFrameWriterV2

Interfaz que se usa para escribir un dataframe en un almacenamiento externo mediante la API v2.

Para la mayoría de los casos de uso con tablas de Databricks y Delta Lake, DataFrameWriterV2 proporciona opciones más eficaces y flexibles que dataFrameWriter originales:

  • Mejor compatibilidad con propiedades de tabla
  • Control más específico sobre la creación de particiones
  • Funcionalidades de sobrescritura condicional
  • Compatibilidad con la agrupación en clústeres
  • Semántica más clara para las operaciones de creación o reemplazo

Admite Spark Connect

Sintaxis

Use DataFrame.writeTo(table) para acceder a esta interfaz.

Methods

Método Descripción
using(provider) Especifica un proveedor para el origen de datos de salida subyacente.
option(key, value) Agregue una opción de escritura. Por ejemplo, para crear una tabla administrada: df.writeTo("test").using("delta").option("path", "s3://test").createOrReplace().
options(**options) Agregar opciones de escritura.
tableProperty(property, value) Agregue la propiedad table. Por ejemplo, use tableProperty("location", "s3://test") para crear una tabla EXTERNAL (no administrada).
partitionedBy(col, *cols) Particione la tabla de salida creada por create, createOrReplace o reemplace mediante las columnas o transformaciones especificadas.
clusterBy(col, *cols) Agrupa los datos de las columnas especificadas para optimizar el rendimiento de las consultas.
create() Cree una nueva tabla a partir del contenido del marco de datos.
replace() Reemplace una tabla existente por el contenido del marco de datos.
createOrReplace() Cree una nueva tabla o reemplace una tabla existente por el contenido de la trama de datos.
append() Anexe el contenido del marco de datos a la tabla de salida.
overwrite(condition) Sobrescriba las filas que coinciden con la condición de filtro dada con el contenido del marco de datos de la tabla de salida.
overwritePartitions() Sobrescriba toda la partición para la que la trama de datos contiene al menos una fila con el contenido del marco de datos en la tabla de salida.

Ejemplos

Creación de una tabla

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

Creación de particiones de datos

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

Establecimiento de las propiedades de la tabla

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

Uso de opciones

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

Agrupación en clústeres de datos

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

Operaciones de reemplazo

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

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

Anexar operaciones

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

Sobrescribir operaciones

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

Encadenamiento de métodos

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