Spark-源码学习-SparkSession-Extensions
一、概述
Spark SQL Extensions 提供了一种灵活的机制,使得 Spark 用户可以在 SQL 解析的 Parser、Analyzer、Optimizer 以及 Planner 等阶段进行自定义扩展,包括自定义 SQL 语法解析、新增数据源等等。
二、设计
SparkSessionExtensions 保存了用户自定义的扩展规则,包含以下方法:
• $buildResolutionRules$ 构建扩展规则添加到 Analyzer 的 resolution 阶段
• $injectResolutionRule$ 向 Analyzer 的 resolution 阶段注册扩展规则生成器
• buildPostHocResolutionRules:构建扩展规则添加到 Analyzer 的 post-hoc resolution 阶段
• injectPostHocResolutionRule:向 Analyzer 的 post-hoc resolution 阶段注册扩展规则生成器
• buildCheckRules:构建扩展检查规则,该规则将会在 analysis 阶段之后运行,用于检查 LogicalPlan 是否存在问题
• injectCheckRule:注册扩展检查规则生成器
• buildOptimizerRules:构建扩展优化规则,将在 optimizer 阶段被调用执行
• injectOptimizerRule:注册扩展优化规则生成器
• buildPlannerStrategies:构建扩展物理执行计划策略,用于将 LogicalPlan 转换为可执行文件
• injectPlannerStrategy:注册扩展物理执行计划策略生成器
• buildParser:构建扩展解析规则
• injectParser:注册扩展解析规则生成器
基于 Spark SQL Extensions 机制实现自定义规则首先编写类实现 Function1[SparkSessionExtensions, Unit] ,SparkSessionExtensions 作为函数入参,调用 SparkSessionExtensions 对应方法将自定义的解析规则注册到对应的 SQL 解析阶段执行,然后将编写的类通过参数 spark.sql.extensions 指定注册到 Spark 中。