In Spark SQL kann die Verwendung benutzerdefinierter Funktionen (UDFs) in SQL-Abfragen insbesondere zu unerwartetem Verhalten führen die Entstehung kartesischer Produkte anstelle der beabsichtigten vollständigen Außenverbindungen.
Beim Einsatz von UDFs behandelt Spark sie als beliebige Funktionen und berücksichtigt jede mögliche Argumentkombination zur Auswertung. Dies erfordert ein kartesisches Produkt, um eine gründliche Untersuchung aller Paare sicherzustellen.
Im Gegensatz zu UDFs verfügen grundlegende Gleichheitsvergleiche wie t1.foo = t2.bar über ein vorhersehbares Verhalten, was Spark ermöglicht um t1- und t2-Zeilen basierend auf den Gleichheitskriterien effizient zu mischen. Diese Optimierung fehlt bei UDFs aufgrund ihrer unvorhersehbaren Natur.
In der relationalen Algebra wird ein Outer Join grundsätzlich als natürlicher Join ausgedrückt, der lediglich ein ist Optimierung in gängigen SQL-Engines. Daher ist es wichtig zu erkennen, dass das Erzwingen eines Outer Joins über ein kartesisches Produkt mit UDFs nicht ohne weiteres möglich ist, ohne die Spark SQL-Engine selbst zu ändern.
Das obige ist der detaillierte Inhalt vonUDFs in Spark SQL: Warum erstellen sie manchmal kartesische Produkte anstelle vollständiger äußerer Verknüpfungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!