SparkSql(二) 窗口函数

SparkSql之窗口函数

所谓的窗口函数指的是对多行数据进行处理返回普通列和聚合列的过程;

详细语法:窗口函数() over([partition by 分区 order by 排序规则 ...])

窗口函数有三种分类:

  • 聚合窗口函数
  • 排名窗口函数
  • 数据分析窗口函数
    在这里插入图片描述

count(…) over(partition by … order by …) --求分组后的总数。 sum(…)
over(partition by … order by …) --求分组后的和。 max(…)
over(partition by … order by …) --求分组后的最大值。 min(…)
over(partition by … order by …) --求分组后的最小值。 avg(…)
over(partition by … order by …) --求分组后的平均值。 rank()
over(partition by … order by …) --rank值可能是不连续的。 dense_rank()
over(partition by … order by …) --rank值是连续的。 first_value(…)
over(partition by … order by …) --求分组内的第一个值。 last_value(…)
over(partition by … order by …) --求分组内的最后一个值。 lag()
over(partition by … order by …) --取出前n行数据。   lead()
over(partition by … order by …) --取出后n行数据。 ratio_to_report()
over(partition by … order by …) --Ratio_to_report()
括号中就是分子,over() 括号中就是分母。 percent_rank() over(partition by … order by
…) –

各个窗口函数应用的小场景案例

  • rank() 求某天每个用户访问页面次数前10的页面
//测试数据
 val rdd = spark.sparkContext.makeRDD(
  List(
      ("2018-01-01", 1, "www.baidu.com", "10:01"),
      ("2018-01-01", 2, "www.baidu.com", "10:01"),
      ("2018-01-01", 1, "www.sina.com", "10:01"),
      ("2018-01-01", 3, "www.baidu.com", "10:01"),
      ("2018-01-01", 3, "www.baidu.com", "10:01"),
      ("2018-01-01", 1, "www.sina.com", "10:01")
    ))

解题思路
1.每个用户访问不同页面的次数
2.对每个用户点击页面次数降序排列,并且使用窗口函数中的排名函数
3.获得每个用户访问次数前十的页面 where rank < n

方法一:调用方法实现

 import sp.implicits._
    //导入窗口函数的支持
    import org.apache.spark.sql.functions._
    rdd
      .toDF("time","uid","path","ztime")
      .groupBy("uid","path")  //根据用户 和访问的网址 分组
      .count()   //分组之后的聚合操作  通知每个用户访问每个网址的次数
      //添加列 列名  rank   窗口函数rank():rank值可能是不连续的   over 创建的窗口
      
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值