[FIXED] Scala: beste Möglichkeit, eine deltatable zu aktualisieren, nachdem fehlende Werte ausgefüllt wurden

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 nullWerte enthalten, die Sie füllen möchten.

MERGEschreibt 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 MERGESie zur Verwendung von den Datensatz nur nach den Änderungen filtern. Ihre Beispieltabelle “gewünschte Ausgabe” enthält alle Daten, die Sie MERGEin 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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like