16 ,spark sql : 开窗函数 ,top3
一 ,开窗函数 :
1 ,共几行 :
- sql :
val sql = "select sid,sname,count(1) over() cnt from student"
val df: DataFrame = spark.sql(sql)
df.show(100)
- 结果 :
+---+------+---+
|sid| sname|cnt|
+---+------+---+
| 1|孙福龙| 8|
| 2|王婷婷| 8|
| 3|王丹丹| 8|
| 4|孙尚文| 8|
| 5|孙静雅| 8|
| 6|王珞丹| 8|
| 7| 张三| 8|
| 8| 李四| 8|
+---+------+---+
2 ,分数表 : 二次排序 ( 科目,分数 )
- sql :
select cid,sid,score
from score
order by cid asc,score desc
- 结果 :
+---+---+-----+
|cid|sid|score|
+---+---+-----+
| 1| 3| 91|
| 1| 2| 79|
| 1| 7| 66|
| 1| 1| 56|
| 1| 8| 49|
| 1| 5| 46|
| 1| 6| 35|
| 2| 4| 88|
| 2| 7| 88|
| 2| 2| 81|
| 2| 1| 78|
| 2| 6| 68|
| 2| 3| 47|
| 2| 8| 11|
| 3| 2| 92|
| 3| 4| 90|
| 3| 3| 88|
| 3| 5| 78|
| 3| 7| 77|
| 3| 1| 67|
| 3| 8| 22|
| 4| 7| 98|
| 4| 4| 93|
| 4| 6| 71|
| 4| 2| 68|
| 4| 1| 58|
| 4| 3| 56|
| 4| 5| 53|
| 4| 8| 38|
+---+---+-----+
3 ,分组,排序 :
- sql :
val sql = "select row_number() over(partition by cid order by score desc) res,cid,sid,score from score"
val df: DataFrame = spark.sql(sql)
df.show(100)
- 结果 :
+---+---+---+-----+
|res|cid|sid|score|
+---+---+---+-----+
| 1| 1| 3| 91|
| 2| 1| 2| 79|
| 3| 1| 7| 66|
| 4| 1| 1| 56|
| 5| 1| 8| 49|
| 6| 1| 5| 46|
| 7| 1| 6| 35|
| 1| 3| 2| 92|
| 2| 3| 4| 90|
| 3| 3| 3| 88|
| 4| 3| 5| 78|
| 5| 3| 7| 77|
| 6| 3| 1| 67|
| 7| 3| 8| 22|
| 1| 4| 7| 98|
| 2| 4| 4| 93|
| 3| 4| 6| 71|
| 4| 4| 2| 68|
| 5| 4| 1| 58|
| 6| 4| 3| 56|
| 7| 4| 5| 53|
| 8| 4| 8| 38|
| 1| 2| 4| 88|
| 2| 2| 7| 88|
| 3| 2| 2| 81|
| 4| 2| 1| 78|
| 5| 2| 6| 68|
| 6| 2| 3| 47|
| 7| 2| 8| 11|
+---+---+---+-----+
4 ,top3 :
- sql :
val sql = "select * from (select row_number() over(partition by cid order by score desc) num,cid,sid,score from score) res where res.num<=3"
val df: DataFrame = spark.sql(sql)
df.show(100)
- 结果 :
+---+---+---+-----+
|num|cid|sid|score|
+---+---+---+-----+
| 1| 1| 3| 91|
| 2| 1| 2| 79|
| 3| 1| 7| 66|
| 1| 3| 2| 92|
| 2| 3| 4| 90|
| 3| 3| 3| 88|
| 1| 4| 7| 98|
| 2| 4| 4| 93|
| 3| 4| 6| 71|
| 1| 2| 4| 88|
| 2| 2| 7| 88|
| 3| 2| 2| 81|
+---+---+---+-----+
二 ,日期函数 :
1 ,将字符串转为日期类型 :
- 思路 : String - java.util.Date - long - java.sql.Date - 日期类型
- 核心代码 :
new Date(format.parse(arr(3)).getTime)
StructField("tbirth", DateType, true),
- 全部代码 :
val rddRowTeacher: RDD[Row] = rddTeacher.map(line => {valarr: Array[String] = line.split("\t")Row(arr(0).toInt, arr(1), arr(2), new Date(format.parse(arr(3)).getTime), arr(4), arr(5))
})
val fieldsTeacher: Array[StructField] = Array(StructField("tid", IntegerType, true),StructField("tname", StringType, true),StructField("tsex", StringType, true),StructField("tbirth", DateType, true),StructField("tlevel", StringType, true),StructField("tdepart", StringType, true)
)
2 ,直接查询日期类型 :
- sql
val sql ="select sbirth from student where sid=1"
- 结果 :
+----------+
| sbirth|
+----------+
|1989-03-09|
+----------+
16 ,spark sql : 开窗函数 ,top3相关推荐
- Spark SQL 开窗函数row_number的使用
Spark SQL 开窗函数row_number的使用 窗口函数 row_number即为分组取topN 参考文本: 型号 ...
- mysql开窗函数_魔幻的SQL开窗函数,为您打开进阶高手的一扇天窗
经常写SQL脚本的朋友,通常会有一种迷之自信,似乎各种问题都有自己的一套解决方案.时间长了,人的思维可能会逐渐固化.思维固化能提高工作效率,但从某些角度看是很可怕的,我们也同时会失去接受新知识的内在动 ...
- spark SQL自定义函数:
spark SQL 自定义函数: 自定义函数: 第一种: U D F (用户自定义函数)函数 特点: 一对一的关系,输入一个值以后输出一个值 (一进一出) 大部分的内置函数都是U D F函数 ...
- SQL开窗函数之前后函数(LEAD、LAG)
开窗函数 当我们需要进行一些比较复杂的子查询时,聚合函数就会非常的麻烦,因此可以使用开窗函数进行分组再运用函数查询.窗口函数既可以显示聚集前的数据,也可以显示聚集后的数据,可以在同一行中返回基础行的列 ...
- Hive SQL开窗函数详解
Hive 开窗函数 group by 是分组函数,一组出来一个数据 over() 开窗,针对每一条数据,都有一个独立的组 mk 3 jk 3 mk 3 select orderdate,cost,su ...
- SQL开窗函数(窗口函数)详解
一.什么是开窗函数 开窗函数/分析函数:over() 开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数. 开窗函数的调用格式为: 函数名(列名) OVER(partition by ...
- SQL 开窗函数使用
好多次笔试面试的题都考到开窗函数,若对开窗函数不了解,真的吃了好大的亏,今天花点时间整理一下. 此文章整理的知识点部分来自:https://www.cnblogs.com/lihaoyang/p/67 ...
- Spark SQL自定义函数_第五章
1.自定义函数分类 类似于hive当中的自定义函数, spark同样可以使用自定义函数来实现新的功能. spark中的自定义函数有如下3类 1.UDF(User-Defined-Function) 输 ...
- Spark SQL自定义函数
文章目录 自定义函数分类 自定义UDF 自定义UDAF[了解] 自定义函数分类 类似于hive当中的自定义函数, spark同样可以使用自定义函数来实现新的功能. spark中的自定义函数有如下3类 ...
- spark sql substr函数
开发中,经常进行模糊查询或者进行截取字符串进行模糊匹配,常用的就是substr函数或者substring函数. 使用语法: substr(string A, int start),substring( ...
最新文章
- Android:项目关联Library
- 华山论剑之浅谈iOS的生产线 工厂模式
- 面试官:给我说一下 Spring MVC 拦截器的原理?
- Access2007及以后的版本中的数据库连接字符串
- hosts文件与resolv.conf文件
- 节假日api_iOS能跳过节假日的晚安闹钟捷径
- python数学计算_初学者Python学习笔记--数学计算
- crash recovery mysql_InnoDB crash recovery 完整过程
- GHOSTXP_SP3电脑公司快速安装机版V2013
- php 双向队列,PHP实现一个双向队列
- 矩池云上使用nvidia-smi命令教程
- 数据集 —— ground truth 数据集
- 冰原服务器维护,12月2日服务器公告 冰原旅途进发
- Learning a Discriminative Feature Network for Semantic Segmentation(语义分割DFN,区别特征网络)...
- 机械--NX2007(UG)有限元分析教程1--简单物体
- 7天连锁酒店郑南雁:顺势创业者无为管理人
- html动态和静态的区别,静态测试和动态测试的区别是什么
- 贱人工具箱使用技巧系列1——旋转复制
- Hyper-V安装lede软路由历程及注意事项
- (word、ppt、excel)​office怎么删除历史文档记录