zoukankan      html  css  js  c++  java
  • spark sql 执行计划生成案例

    前言

        一个SQL从词法解析、语法解析、逻辑执行计划、物理执行计划最终转换为可以执行的RDD,中间经历了很多的步骤和流程。其中词法分析和语法分析均有ANTLR4完成,可以进一步学习ANTLR4的相关知识做进一步了解。

        本篇文章主要对一个简单的SQL生成的逻辑执行计划物理执行计划的做一个简单地说明。

    示例代码

    case class Person(name: String, age: Long)
    private def runBasicDataFrameExample2(spark: SparkSession): Unit = {
      import spark.implicits._
      val df: DataFrame = spark.sparkContext
        .parallelize(
          Array(
            Person("zhangsan", 10),
            Person("lisi", 20),
            Person("wangwu", 30))).toDF("name", "age")
      df.createOrReplaceTempView("people")
      spark.sql("select * from people where age >= 20").show()
    }

    生成逻辑物理执行计划示例

        生成的逻辑和物理执行计划,右侧的是根据QueryExecution的 toString 方法,得到的对应结果

    QueryExecution关键源码分析

        对关键源码,自己做了简单的分析。如下图:

        其中SparkSqlParser使用ASTBuilder生成UnResolved LogicalPlan。

    最后

        注意Spark SQL 从driver 提交经过词法分析、语法分析、逻辑执行计划、到可落地执行的物理执行计划。其中前三部分都是 spark catalyst 子模块的功能,与最终在哪个SQL执行引擎上执行并无多大关系。物理执行计划是后续转换为RDD的基础和必要条件。

        本文对Spark SQL中关键步骤都有一定的涉及,也可以针对QueryExecution做后续的分析,建议修改SparkSQL 源码,做本地调试。后续会进一步分析,主要结合 《SparkSQL 内核剖析》这本书以及自己在工作学习中遇到的各种问题,做进一步源码分析

  • 相关阅读:
    python把汉字转换成拼音实现程序
    C#第三方zip解压压缩工具,带事例源码
    实现在线压缩文件的实现程序代码
    如何处理JSON中的特殊字符
    《汉字简体、繁体相互转换》 查看源代码
    中文字符转拼音源码
    upper_bound()函数使用方法
    CodeFroces New Assignment 二分图匹配
    选拔赛 hash 字符串匹配 哈希算法(白书p374)
    lower_bound()函数使用
  • 原文地址:https://www.cnblogs.com/johnny666888/p/12343338.html
Copyright © 2011-2022 走看看