Spark1.4发布,支持了窗口分析函数(window functions)。
在离线平台中,90%以上的离线分析任务都是使用Hive实现,其中必然会使用很多窗口分析函数,如果SparkSQL支持窗口分析函数,
那么对于后面Hive向SparkSQL中的迁移的工作量会大大降低,使用方式如下:

1、初始化数据

创建表

create table window_test2 (url string, rate int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

准备测试数据
url1,12
url2,11
url1,23
url2,25
url1,58
url3,11
url2,25
url3,58
url2,11

加载数据:
load data local inpath '/opt/bin/short_opt/windows2.data' overwrite into table window_test2 ;

2、窗口函数测试
查询所有数据

select * from window_test2;
+-------+-------+
|  url  | rate  |
+-------+-------+
| url1  | 12    |
| url2  | 11    |
| url1  | 23    |
| url2  | 25    |
| url1  | 58    |
| url3  | 11    |
| url2  | 25    |
| url3  | 58    |
| url2  | 11    |
+-------+-------+

分组排序:
select url,rate,row_number() over(partition by url order by rate desc) as r from window_test2;
+-------+-------+----+
|  url  | rate  | r  |
+-------+-------+----+
| url1  | 58    | 1  |
| url1  | 23    | 2  |
| url1  | 12    | 3  |
| url2  | 25    | 1  |
| url2  | 25    | 2  |
| url2  | 11    | 3  |
| url2  | 11    | 4  |
| url3  | 58    | 1  |
| url3  | 11    | 2  |
+-------+-------+----+

分组统计sum
select url,rate,sum(rate) over(partition by url ) as r from window_test2;
+-------+-------+-----+
|  url  | rate  |  r  |
+-------+-------+-----+
| url1  | 12    | 93  |
| url1  | 23    | 93  |
| url1  | 58    | 93  |
| url2  | 11    | 72  |
| url2  | 25    | 72  |
| url2  | 25    | 72  |
| url2  | 11    | 72  |
| url3  | 11    | 69  |
| url3  | 58    | 69  |
+-------+-------+-----+

分组统计avg
select url,rate,avg(rate) over(partition by url ) as r from window_test2;
+-------+-------+-------+
|  url  | rate  |   r   |
+-------+-------+-------+
| url1  | 12    | 31.0  |
| url1  | 23    | 31.0  |
| url1  | 58    | 31.0  |
| url2  | 25    | 18.0  |
| url2  | 11    | 18.0  |
| url2  | 11    | 18.0  |
| url2  | 25    | 18.0  |
| url3  | 11    | 34.5  |
| url3  | 58    | 34.5  |
+-------+-------+-------+

分组统计count
select url,rate,count(rate) over(partition by url ) as r from window_test2;
+-------+-------+----+
|  url  | rate  | r  |
+-------+-------+----+
| url1  | 12    | 3  |
| url1  | 23    | 3  |
| url1  | 58    | 3  |
| url2  | 11    | 4  |
| url2  | 25    | 4  |
| url2  | 25    | 4  |
| url2  | 11    | 4  |
| url3  | 11    | 2  |
| url3  | 58    | 2  |
+-------+-------+----+

分组lag
select url,rate,lag(rate) over(partition by url ) as r from window_test2;
+-------+-------+-------+
|  url  | rate  |   r   |
+-------+-------+-------+
| url1  | 12    | NULL  |
| url1  | 23    | 12    |
| url1  | 58    | 23    |
| url2  | 25    | NULL  |
| url2  | 11    | 25    |
| url2  | 11    | 11    |
| url2  | 25    | 11    |
| url3  | 11    | NULL  |
| url3  | 58    | 11    |
+-------+-------+-------+

3、spark-1.4以后,支持所有的窗口函数了,有利用于hive作业向spark-sql来转换。
---------------------

原文:https://blog.csdn.net/kwu_ganymede/article/details/50457528

 

下面的博客汇总中,例子都很清晰,感谢博主:

 

分析窗口函数汇总:

part1: SUM,AVG,MIN,MAX 

http://lxw1234.com/archives/2015/04/176.htm

part2: NTILE,ROW_NUMBER,RANK,DENSE_RANK 

http://lxw1234.com/archives/2015/04/181.htm

part3: CUME_DIST,PERCENT_RANK

http://lxw1234.com/archives/2015/04/185.htm

part4:LAG,LEAD,FIRST_VALUE,LAST_VALUE

http://lxw1234.com/archives/2015/04/190.htm

part5: GROUPING SETS,GROUPING__ID,CUBE,ROLLUP

http://lxw1234.com/archives/2015/04/193.htm

 
序列函数不支持WINDOW子句. 

http://lxw1234.com/archives/tag/hive-window-functions

hive Spark SQL分析窗口函数的更多相关文章

  1. 【慕课网实战】八、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    用户行为日志:用户每次访问网站时所有的行为数据(访问.浏览.搜索.点击...)     用户行为轨迹.流量日志   日志数据内容: 1)访问的系统属性: 操作系统.浏览器等等 2)访问特征:点击的ur ...

  2. Spark SQL官方文档阅读--待完善

    1,DataFrame是一个将数据格式化为列形式的分布式容器,类似于一个关系型数据库表. 编程入口:SQLContext 2,SQLContext由SparkContext对象创建 也可创建一个功能更 ...

  3. Spark SQL大数据处理并写入Elasticsearch

    SparkSQL(Spark用于处理结构化数据的模块) 通过SparkSQL导入的数据可以来自MySQL数据库.Json数据.Csv数据等,通过load这些数据可以对其做一系列计算 下面通过程序代码来 ...

  4. spark SQL概述

    Spark SQL是什么? 何为结构化数据 sparkSQL与spark Core的关系 Spark SQL的前世今生:由Shark发展而来 Spark SQL的前世今生:可以追溯到Hive Spar ...

  5. Spark基础:(六)Spark SQL

    1.相关介绍 Datasets:一个 Dataset 是一个分布式的数据集合 Dataset 是在 Spark 1.6 中被添加的新接口, 它提供了 RDD 的优点(强类型化, 能够使用强大的 lam ...

  6. Hive、Spark SQL、Impala比较

    Hive.Spark SQL.Impala比较        Hive.Spark SQL和Impala三种分布式SQL查询引擎都是SQL-on-Hadoop解决方案,但又各有特点.前面已经讨论了Hi ...

  7. Spark SQL 源代码分析之 In-Memory Columnar Storage 之 in-memory query

    /** Spark SQL源代码分析系列文章*/ 前面讲到了Spark SQL In-Memory Columnar Storage的存储结构是基于列存储的. 那么基于以上存储结构,我们查询cache ...

  8. Spark SQL Catalyst源代码分析之TreeNode Library

    /** Spark SQL源代码分析系列文章*/ 前几篇文章介绍了Spark SQL的Catalyst的核心执行流程.SqlParser,和Analyzer,本来打算直接写Optimizer的,可是发 ...

  9. Spark SQL源代码分析之核心流程

    /** Spark SQL源代码分析系列文章*/ 自从去年Spark Submit 2013 Michael Armbrust分享了他的Catalyst,到至今1年多了,Spark SQL的贡献者从几 ...

随机推荐

  1. CodeForces - 862C Mahmoud and Ehab and the xor(构造)【异或】

    <题目链接> 题目大意: 给出n.m,现在需要你输出任意n个不相同的数(n,m<1e5),使他们的异或结果为m,如果不存在n个不相同的数异或结果为m,则输出"NO" ...

  2. Qt创建任务栏进度条

    一.正文 任务栏进度条是Windows7就引入的一种UI形式,通常用于显示软件当前正在执行的任务的进度(如编译程序的进度.下载任务的进度).如下: 在Qt中使用任务栏进度条也是非常容易的一件事情.Qt ...

  3. HDU.4694.Important Sisters(支配树)

    HDU \(Description\) 给定一张简单有向图,起点为\(n\).对每个点求其支配点的编号和. \(n\leq 50000\). \(Solution\) 支配树. 还是有点小懵逼. 不管 ...

  4. 洛谷P1880 石子合并(区间DP)(环形DP)

    To 洛谷.1880 石子合并 题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1 ...

  5. 【整理】Java 11新特性总结

    闲语 2018年9月25日,Java 11正式发布,与JDK 10不同,JDK 11将提供长期支持,还将作为Java平台的参考实现以及标准版(Java SE)11.Oracle直到2023年9月都会为 ...

  6. go channel tips

    一.只有一个goroutine时,读写阻塞的chan会出错(“fatal error: all goroutines are asleep - deadlock!”).包括未make的chan(cha ...

  7. Django——邮件发送

    在settings中添加关键信息 EMAIL_HOST = 'smtp.qq.com' #不同的邮箱有不同的发件地址(收件地址) EMAIL_PORT = 25 #smtp端口号 EMAIL_HOST ...

  8. JAVA自学笔记18

    JAVA自学笔记18 1.Map接口: 1)功能: 2) Map<String,String>m=new HashMap<String,String>(); //添加元素,元素 ...

  9. JSP(2)—绝对路径与相对路径、配置Servlet与Servlet注解

    一.绝对路径和相对路径 ①开发时建议使用据对路径,使用绝对路径肯定没有问题,但是用相对路径可能会有问题. 在由Servlet转发到JSP页面时,此时在浏览器地址栏显示Sevvlet路径,若JSP页面的 ...

  10. ESP8266 NOOS SDK libat.a Functions

    at_baseCmd.o custom_infoat_baseCmd.o at_exeCmdNullat_baseCmd.o at_setupCmdEat_baseCmd.o at_exeCmdRst ...