Catalyst Optimizer
No centro do Spark SQL está o Catalyst Optimizer, que usa recursos avançados de linguagem de programação (por exemplo, correspondência de padrões do Scala e quasi quotes) em uma nova maneira de construir um otimizador de queries extensível. O Catalyst é baseado em construções de programação funcional em Scala e projetado com estes dois propósitos principais:
- Adicionar facilmente novas técnicas e recursos de otimização ao Spark SQL
- Permitir que desenvolvedores externos ampliem o otimizador (por exemplo, adicionando regras específicas de fonte de dados, suporte para novos tipos de dados etc.)
O Catalyst contém uma biblioteca geral para representar árvores e aplicar regras para manipulá-las. Além dessa estrutura, ele tem bibliotecas específicas para processamento de query relacional (por exemplo, expressões, planos de query lógico) e vários conjuntos de regras que lidam com diferentes fases de execução de queries: análise, otimização lógica, planejamento físico e geração de código para compilar partes de queries ao bytecode Java. Para este último, ele utiliza outro recurso do Scala, quasiquotes, que facilita a geração de código no tempo de execução a partir de expressões compostas. O Catalyst também oferece vários pontos de extensão públicos, incluindo fontes de dados externas e tipos definidos pelo usuário. Além disso, o Catalyst oferece suporte à otimização baseada em regras e em custos.