Heim >Datenbank >MySQL-Tutorial >Warum verursachen Spark SQL-UDFs manchmal kartesische Produkte anstelle von Outer Joins?
UDFs und kartesische Produkte
Das Problem verstehen
In Spark SQL unter Verwendung eines benutzerdefinierten Benutzers Definierte Funktionen (UDFs) in SQL-Abfragen können manchmal zu kartesischen Produktberechnungen anstelle des erwarteten vollständigen Outer-Joins führen. Dieses Leistungsproblem entsteht, weil die Verwendung von UDFs eine willkürliche und nicht deterministische Funktion einführt, was es für den Optimierer schwierig macht, ihren Wert zu bestimmen, ohne alle möglichen Eingabekombinationen auszuwerten.
Lösung
Im Gegensatz zu UDFs hat die einfache Gleichheitsbedingung in einem vollständigen Outer-Join (t1.foo = t2.bar) ein vorhersehbares Verhalten. Der Optimierer kann t1- und t2-Zeilen basierend auf foo bzw. bar mischen, um den Join effizient zu berechnen.
Verhinderung des kartesischen Produkts
Ohne die Änderung von Spark SQL Engine gibt es keine einfache Möglichkeit, einen Outer Join über das kartesische Produkt zu erzwingen, das eine UDF einführt. Diese Einschränkung ergibt sich aus der inhärenten Natur von UDFs, die die Auswertung aller möglichen Argumentkombinationen erfordern, um ihren Wert zu bestimmen.
Das obige ist der detaillierte Inhalt vonWarum verursachen Spark SQL-UDFs manchmal kartesische Produkte anstelle von Outer Joins?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!