写点什么

大数据训练营一期 0829 作业

作者:朱磊
  • 2021 年 11 月 16 日
  • 本文字数:1115 字

    阅读完需:约 4 分钟

第一题,为 Spark SQL 添加一条自定义命令

  • SHOW VERSION

  • 显示当前 Spark 版本和 Java 版本


答:

实现过程如下,

  1. 通过修改 SqlBase.g4 文件添加自定义命令,需要在原生 SqlBase.g4 文件中添加下面 4 处

1)

statement

: query

| SHOW VERSION #showVersion

2)

nonReserved

//--DEFAULT-NON-RESERVED-START

: ADD

| VERSION

3)

ansiNonReserved

//--ANSI-NON-RESERVED-START

: ADD

| VERSION


4)

//============================

// Start of the keywords list

//============================

//--SPARK-KEYWORD-LIST-START

VERSION: 'VERSION';


  1. 执行 spark-catalyst maven module 的 anltr4:anltr4 goal

  2. 修改 SparkSqlParser.scala 文件, 重写 visitShowVersion 方法

override def visitShowVersion(ctx: ShowVersionContext): LogicalPlan = withOrigin(ctx) {

ShowVersionCommand()

}

  1. 在 commands.scala 类中增加实现类 ShowVersionCommand,代码如下,

case class ShowVersionCommand() extends RunnableCommand { override def run(sparkSession: SparkSession): Seq[Row] = { Seq(Row(util.Properties.versionNumberString, System.getProperty("java.version"))) } }

  1. 在 spark 源码根目录下执行命令"./build/sbt package -DskipTests -Phive -Phive-thriftserver"

  2. 将 SPARK_HOME 环境变量设置成 spark 源码根目录,然后执行./bin/spark-sql,进入 spark-sql 控制台之后,执行 show version 命令,过程如下图,


第二题,构建 SQL 满足如下要求通过 set spark.sql.planChangeLog.level=WARN;查看

1. 构建一条 SQL,同时 apply 下面三条优化规则:

CombineFilters

CollapseProject

BooleanSimplification

2. 构建一条 SQL,同时 apply 下面五条优化规则:

ConstantFolding

PushDownPredicates

ReplaceDistinctWithAggregate

ReplaceExceptWithAntiJoin

FoldablePropagation


答:

第一条 sql 如下,spark plan 日志见链接https://gitee.com/leoIamOk/geek-university-bigdata-training-camp/blob/master/assignment_0829/plan_log1.txt

select a.address

from (

select name, address,age

from customers

where 1="1" and age > 5

) a

where a.age<30


第二条 sql 如下,spark plan 日志见链接https://gitee.com/leoIamOk/geek-university-bigdata-training-camp/blob/master/assignment_0829/plan_log2.txt

(select a.address , a.age + (100 + 80) , Now() z

from (

select distinct name, age , address

from customers

) a

where a.age>10 order by z)

except

(select a.address , a.age + (100 + 80), Now() z

from (

select distinct name, age , address

from customers

) a

where a.name="saya");

发布于: 3 小时前阅读数: 11
用户头像

朱磊

关注

还未添加个人签名 2017.12.06 加入

还未添加个人简介

评论

发布
暂无评论
大数据训练营一期0829作业