Ottimizzatore Catalyst
Il cuore di Spark SQL è l'ottimizzatore Catalyst, che sfrutta funzionalità avanzate del linguaggio di programmazione (ad es. pattern matching di Scala e quasiquotes) in modo nuovo per costruire un ottimizzatore di query estensibile. Catalyst si basa su costrutti di programmazione funzionale in Scala ed è progettato per due scopi principali:
- aggiungere facilmente nuove tecniche di ottimizzazione e funzionalità a Spark SQL;
- consentire a sviluppatori esterni di estendere l'ottimizzatore (ad es. aggiungendo regole specifiche per sorgenti di dati, supporto per nuovi tipi di dati ecc.).
Catalyst contiene una libreria generale per rappresentare alberi e applicare regole per manipolarli. Sopra a questa struttura ci sono librerie specifiche per l'elaborazione di query relazionali (ad es. espressioni, piani di query logici) e numerosi set di regole che gestiscono diverse fasi di esecuzione delle query: analisi, ottimizzazione logica, pianificazione fisica e generazione di codice per compilare parti di query in bytecode di Java. Per quest'ultima attività viene utilizzata un'altra funzionalità di scala, le quasiquotes, che facilitano la generazione di codice nel runtime partendo da espressioni componibili. Catalyst offre anche diversi punti di estensione pubblici, fra cui fonti di dati esterne e tipologie definite dall'utente. Inoltre, Catalyst supporta l'ottimizzazione sia basata su regole sia basata su costi.