Dans Spark SQL, l'utilisation de fonctions définies par l'utilisateur (UDF) dans les requêtes SQL peut introduire un comportement inattendu, en particulier l'émergence de produits cartésiens au lieu des jointures externes complètes prévues.
Lors de l'utilisation d'UDF, Spark les traite comme des fonctions arbitraires, en considérant toutes les combinaisons d'arguments possibles pour l'évaluation. Cela nécessite un produit cartésien pour garantir un examen approfondi de toutes les paires.
Contrairement aux UDF, les comparaisons d'égalité de base comme t1.foo = t2.bar possèdent un comportement prévisible, permettant à Spark pour mélanger efficacement les lignes t1 et t2 en fonction des critères d'égalité. Cette optimisation est absente des UDF en raison de leur nature imprévisible.
En algèbre relationnelle, une jointure externe s'exprime fondamentalement comme une jointure naturelle, qui n'est qu'un optimisation dans les moteurs SQL populaires. Par conséquent, il est crucial de reconnaître que forcer une jointure externe sur un produit cartésien avec des UDF n'est pas facilement réalisable sans modifier le moteur Spark SQL lui-même.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!