内容简介:1 开胃菜,spark sql 窗口函数的基本概念和使用姿势2 spark sql 中窗口函数深入理解3 不是UDF,也不是UDAF,教你自定义一个窗口函数(UDWF)
spark君说:
昨天在公众号圈子里面发生了一件大事,就是咪蒙的公众号被注销了,有个比较出名的词叫含咪率,就是关注咪蒙公众号的微信好友数目/总微信好友数,通过这个词就可见咪蒙有多火了。
我以前个人在朋友圈中点开过咪蒙写的文章,作为一个逻辑感比较强的程序员,被其偷换概念和带节奏的手法恶心到了。这里之所以提这个事情,就是我观察到一个现象就是,咪蒙之所以那么火的原因就是擅长贩卖情感焦虑,这种手法很能带节奏,很有传播效果,还有一些大v比较擅长贩卖知识焦虑,前端时间还有人把逻辑思维卖课比作针对年轻人的权健,说的也是这个事情。
spark君想表达,焦虑真的有用么?有个毛用,焦虑本身没有任何作用,在资本寒冬下找工作,能真正帮助到你的是你平时的积累,有些同学天天不是关心这里裁员了,就是关心那里冻结招聘,担心这个,担心那个,然后买一堆课程,加了一堆付费的知识星球,然后就没有然后了,这样活该被圈钱,免费的知识多着呢,spark君提供的都是免费的优质的内容,重要的是你能静下心来真正学进去,才能立于不败之地,spark君也反思了一下之前的一些推文,有些也制造了一些焦虑,这样的文章以后spark君尽量少发,除非能提供一定的有价值的信息。
最近理了下spark sql 中窗口函数的知识,打算开几篇文章讲讲,窗口函数有很多应用场景,比如说炒股的时候有个5日移动均线,或者让你对一个公司所有销售所有部门按照销售业绩进行排名等等,都是要用到窗口函数,在spark sql中,窗口函数和聚合函数的区别,之前文章中也提到过,就是聚合函数是按照你聚合的维度,每个分组中算出来一个聚合值,而窗口函数是对每一行,都根据当前窗口(5日均线就 是今日往前的5天组成的窗口),都聚合出一个值。
1 开胃菜,spark sql 窗口函数的基本概念和使用姿势
2 spark sql 中窗口函数深入理解
3 不是UDF,也不是UDAF,教你自定义一个窗口函数(UDWF)
4 从 spark sql 源码层面理解窗口函数
正文:
什么是简单移动平均值
简单移动平均(英语:Simple Moving Average,SMA)是某变数之前n个数值的未作加权算术平均。例如,收市价的10日简单移动平均指之前10日收市价的平均数。
直接看例子吧:
这个 window spec 中,数据根据用户(customer)来分去。每一个用户数据根据时间排序。然后,窗口定义从 -1(前一行)到 1(后一行) ,每一个滑动的窗口总用有3行
这段代码添加了一个新列,movingAvg,在滑动的窗口中使用了均值函数:
窗口函数和窗口特征定义
正如上述例子中,窗口函数主要包含两个部分:
指定窗口特征(wSpec):
-
“partitionyBY” 定义数据如何分组;在上面的例子中,是用户 site
-
“orderBy” 定义分组中的排序
-
“rowsBetween” 定义窗口的大小
指定窗口函数函数:
指定窗口函数函数,你可以使用 org.apache.spark.sql.functions 的“聚合函数(Aggregate Functions)”和”窗口函数(Window Functions)“类别下的函数
累计汇总
.rowsBetween(Long.MinValue, 0)
:窗口的大小是按照 排序 从最小值到当前行
前一行数据
lag(field, n)
: 就是取从 当前字段往前第n个 值,这里是取前一行的值
如果计算环比的时候,是不是特别有用啊?!
在介绍几个常用的行数:
-
first/last(): 提取这个分组特定排序的第一个最后一个,在获取用户退出的时候,你可能会用到
-
lag/lead(field, n): lead 就是 lag 相反的操作,这个用于做数据回测特别用,结果回推条件
排名
这个数据在提取每个分组的前n项时特别有用,省了不少麻烦。
大家都在看
▼
关注 【spark技术分享】
一起撸spark源码,一起玩spark最佳实践
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Python 拓展之特殊函数(lambda 函数,map 函数,filter 函数,reduce 函数)
- Python 函数调用&定义函数&函数参数
- python基础教程:函数,函数,函数,重要的事说三遍
- C++函数中那些不可以被声明为虚函数的函数
- 017.Python函数匿名函数
- 纯函数:函数式编程入门
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。