Heim >Datenbank >MySQL-Tutorial >Warum verursachen Spark SQL-UDFs manchmal kartesische Produkte anstelle von Outer Joins?

Warum verursachen Spark SQL-UDFs manchmal kartesische Produkte anstelle von Outer Joins?

Susan Sarandon
Susan SarandonOriginal
2024-12-26 14:13:13594Durchsuche

Why Do Spark SQL UDFs Sometimes Cause Cartesian Products Instead of 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn