Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Schnittstelle zum Schreiben eines DataFrame in externen Speicher mithilfe der v2-API.
Für die meisten Anwendungsfälle mit Databricks-Tabellen und Delta Lake bietet DataFrameWriterV2 leistungsfähigere und flexiblere Optionen als der ursprüngliche DataFrameWriter:
- Bessere Unterstützung von Tabelleneigenschaften
- Feinkörnigere Kontrolle über Partitionierung
- Funktionen für bedingte Überschreibung
- Unterstützung für Clustering
- Klarere Semantik für Erstellungs- oder Ersetzungsvorgänge
Unterstützt Spark Connect
Syntax
Wird DataFrame.writeTo(table) verwendet, um auf diese Schnittstelle zuzugreifen.
Methodik
| Methode | Beschreibung |
|---|---|
using(provider) |
Gibt einen Anbieter für die zugrunde liegende Ausgabedatenquelle an. |
option(key, value) |
Fügen Sie eine Schreiboption hinzu. So erstellen Sie beispielsweise eine verwaltete Tabelle: df.writeTo("test").using("delta").option("path", "s3://test").createOrReplace(). |
options(**options) |
Fügen Sie Schreiboptionen hinzu. |
tableProperty(property, value) |
Fügen Sie die Tabelleneigenschaft hinzu. Verwenden Sie z. B tableProperty("location", "s3://test") . zum Erstellen einer EXTERNEN (nicht verwalteten) Tabelle. |
partitionedBy(col, *cols) |
Partitionieren Sie die ausgabetabelle, die durch erstellen, createOrReplace erstellt oder durch die angegebenen Spalten oder Transformationen ersetzt wird. |
clusterBy(col, *cols) |
Gruppiert die Daten nach den angegebenen Spalten, um die Abfrageleistung zu optimieren. |
create() |
Erstellen Sie eine neue Tabelle aus dem Inhalt des Datenrahmens. |
replace() |
Ersetzen Sie eine vorhandene Tabelle durch den Inhalt des Datenrahmens. |
createOrReplace() |
Erstellen Sie eine neue Tabelle, oder ersetzen Sie eine vorhandene Tabelle durch den Inhalt des Datenrahmens. |
append() |
Fügen Sie den Inhalt des Datenrahmens an die Ausgabetabelle an. |
overwrite(condition) |
Überschreiben Sie Zeilen, die der angegebenen Filterbedingung mit dem Inhalt des Datenrahmens in der Ausgabetabelle übereinstimmen. |
overwritePartitions() |
Überschreiben Sie alle Partitionen, für die der Datenrahmen mindestens eine Zeile mit dem Inhalt des Datenrahmens in der Ausgabetabelle enthält. |
Beispiele
Erstellen einer neuen Tabelle
# 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()
Partitionieren von Daten
# 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()
Festlegen von Tabelleneigenschaften
# Add table properties
df.writeTo("my_table") \
.tableProperty("key1", "value1") \
.tableProperty("key2", "value2") \
.create()
Verwenden von Optionen
# 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()
Clustering-Daten
# Cluster by columns for query optimization
df.writeTo("my_table") \
.clusterBy("user_id", "timestamp") \
.create()
Ersetzungsvorgänge
# Replace existing table
df.writeTo("my_table") \
.using("parquet") \
.replace()
# Create or replace (safe operation)
df.writeTo("my_table") \
.using("parquet") \
.createOrReplace()
Anfügevorgänge
# Append to existing table
df.writeTo("my_table").append()
Überschreiben von Vorgängen
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()
Methodenketten
# Combine multiple configurations
df.writeTo("my_table") \
.using("parquet") \
.option("compression", "snappy") \
.tableProperty("description", "User data table") \
.partitionedBy("year", "month") \
.clusterBy("user_id") \
.createOrReplace()