无论Hive还是SparkSQL分析处理数据时,往往需要使用函数,SparkSQL模块本身自带很多实现公共功能的函数,在pyspark.sql.functions中。SparkSQL与Hive一样支持定义函数:UDF和UDAF,尤其是UDF函数在实际项目中使用最为广泛。
回顾Hive中自定义函数有三种类型:
第一种:UDF (User-Defined-Function)函数
一对一的关系,输入一个值经过函数以后输出一个值;
在Hive中继承UDF类,方法名称为evaluate,返回值不能为void,其实就是实现一个方法;
第二种:UDAF (User-Defined Aggregation Function)聚合函数
多对一的关系,输入多个值输出一个值,通常与groupBy联合使用;
第三种:UDTF (User-Defined Table-Generating Functions)函数
一对多的关系,输入一个值输出多个值(一行变为多行)﹔
用户自定义生成函数,有点像flatMap;
1. SparkSQL支持UDF和UDAF定义,但在Python中,暂时只能定义UDF
2. UDF定义支持2种方式,
1:使用SparkSession对象构建.
2:使用functions包中提供的UDF API构建.要注意,方式1可用DSL和SQL风格,方式2仅可用于DSL风格
3. SparkSQL支持窗口函数使用,常用SQL中的窗口函数均支持,如聚合窗口\排序窗口\NTILE分组窗口等
SparkSQL的执行流程:
1.提交SparkSQL代码
2.catalyst优化
a.生成原始AST语法数
b.标记AST元数据
c.进行断言下推和列值裁剪以及其它方面的优化作用在AST上
d.将最终AST得到,生成执行计划
e.将执行计划翻译为RDD代码
3.Driver执行环境入口构建(SparkSession)
4.DAG调度器规划逻辑任务
5.TASK调度区分配逻辑任务到具体Executor上工作并监控管理任务
6. Worker干活.
今日还完成了Spark On hive的配置以及使用了Datagrip来连接spark