Ausgabe
Ich habe die folgende Deltatabelle
+-+----+
|A|B |
+-+----+
|1|10 |
|1|null|
|2|20 |
|2|null|
+-+----+
Ich möchte die Nullwerte in Spalte B basierend auf der Spalte A füllen.
Ich habe mir dazu folgendes ausgedacht:
var df = spark.sql("select * from MyDeltaTable")
val w = Window.partitionBy("A")
df = df.withColumn("B", last("B", true).over(w))
Was mir die gewünschte Ausgabe gibt:
+-+----+
|A|B |
+-+----+
|1|10 |
|1|10 |
|2|20 |
|2|20 |
+-+----+
Jetzt ist meine Frage:
Was ist der beste Weg, um das Ergebnis korrekt in meine Delta-Tabelle zu schreiben?
Soll ich zusammenführen? Neu schreiben mit Überschreiboption ?
Meine Delta-Tabelle ist riesig und wird weiter steigen, ich suche nach der bestmöglichen Methode, um dies zu erreichen.
Vielen Dank
Lösung
Es hängt von der Verteilung der Zeilen ab (auch bekannt als: Sind sie alle in einer Datei oder über viele verteilt?), die null
Werte enthalten, die Sie füllen möchten.
MERGE
schreibt ganze Dateien neu, so dass Sie am Ende möglicherweise genug von der Tabelle neu schreiben, um es zu rechtfertigen, sie stattdessen einfach zu überschreiben. Sie müssen dies testen, um festzustellen, was für Ihren Anwendungsfall am besten geeignet ist.
Außerdem müssen MERGE
Sie zur Verwendung von den Datensatz nur nach den Änderungen filtern. Ihre Beispieltabelle “gewünschte Ausgabe” enthält alle Daten, die Sie MERGE
in ihrem aktuellen Zustand nicht erhalten würden, da es doppelte Schlüssel gibt.
Überprüfen Sie die Wichtig! Abschnitt in den Dokumenten für mehr
Beantwortet von – Nick Karpov
Antwort geprüft von – Marie Seifert (FixError Admin)