大数据训练营一期 0829 作业
第一题,为 Spark SQL 添加一条自定义命令
SHOW VERSION
显示当前 Spark 版本和 Java 版本
答:
实现过程如下,
通过修改 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';
执行 spark-catalyst maven module 的 anltr4:anltr4 goal
修改 SparkSqlParser.scala 文件, 重写 visitShowVersion 方法
override def visitShowVersion(ctx: ShowVersionContext): LogicalPlan = withOrigin(ctx) {
ShowVersionCommand()
}
在 commands.scala 类中增加实现类 ShowVersionCommand,代码如下,
case class ShowVersionCommand() extends RunnableCommand { override def run(sparkSession: SparkSession): Seq[Row] = { Seq(Row(util.Properties.versionNumberString, System.getProperty("java.version"))) } }
在 spark 源码根目录下执行命令"./build/sbt package -DskipTests -Phive -Phive-thriftserver"
将 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");
版权声明: 本文为 InfoQ 作者【朱磊】的原创文章。
原文链接:【http://xie.infoq.cn/article/f42730f552fe5e01e73e2ef1f】。未经作者许可,禁止转载。
评论