Catalyst optimizer
Le cœur de Spark SQL repose sur Catalyst optimizer, qui utilise de manière innovante des capacités avancées de codage (telles que le pattern matching et les quasiquotes de Scala) pour créer un optimiseur de requêtes extensible. Catalyst est basé sur des structures de programmation fonctionnelle en Scala et conçu avec deux objectifs clés :
- permettre une intégration aisée de nouvelles techniques et fonctionnalités d'optimisation à Spark SQL ; et
- offrir aux développeurs externes la possibilité d'étendre l'optimiseur en ajoutant des règles adaptées à leur source de données ou en prenant en charge de nouveaux types de données, entre autres.
Catalyst dispose d'une bibliothèque générale pour représenter les arbres et appliquer des règles pour les manipuler. Il possède des bibliothèques spécifiques au traitement des requêtes relationnelles (par exemple, des expressions, des plans de requêtes logiques) au-dessus de ce framework ainsi que plusieurs ensembles de règles régissant les différentes phases de l'exécution des requêtes. Ces étapes incluent l'analyse, l'optimisation logique, la planification physique et la génération de code, permettant ainsi de compiler des parties de requêtes en bytecode Java. Pour ce faire, il utilise une autre fonctionnalité de Scala, les quasiquotes, qui permet de générer facilement du code à l'exécution, à partir d'expressions composables. Catalyst offre également plusieurs points d'extension publics, notamment des sources de données externes et des types définis par l'utilisateur. En outre, Catalyst prend en charge l'optimisation basée à la fois sur les règles et sur les coûts.