博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SparkSQL介绍并实现开窗函数
阅读量:3951 次
发布时间:2019-05-24

本文共 1849 字,大约阅读时间需要 6 分钟。

1.开窗函数

  • 聚合函数和开窗函数

聚合函数是将多行变成一行

开窗函数是将一行变成多行

  • 开窗函数分类

聚合开窗函数 : 聚合函数over 这里的选择可以是partition by 子句,但不可以是order by子句

排序开窗函数 : 排序函数over 这里的选项可以是order by 子句,可以是 over(partition by 子句 order by 子句), 但不可以是 partition by 子句。

2.准备工作

//导包import org.apache.spark.sql.SparkSession//创建class 样例类case class Score(name: String, clazz: Int, score: Int)//编写代码// 1.实例SparkSession    val spark = SparkSession.builder().master("local[*]").appName("sql").getOrCreate()//2.根据SparkSession获取sparkContext 上下文对象    val sc = spark.sparkContext//3.导入隐式类    import spark.implicits._//4.添加创建RDD并添加数据    val scoreDF = sc.makeRDD(Array(      Score("a1", 1, 80),      Score("a2", 1, 78),      Score("a3", 1, 95),      Score("a4", 2, 74),      Score("a5", 2, 92),      Score("a6", 3, 99),      Score("a7", 3, 99),      Score("a8", 3, 45),      Score("a9", 3, 55),      Score("a10", 3, 78),      Score("a11", 3, 100))).toDF("name", "clazz", "score")//5.注册表    scoreDF.createOrReplaceTempView("scores")//6.数据展示    scoreDF.show()

3.聚合开窗函数

spark.sql("select * , count(name) over() name_count from scores").show()// 按照班级进行分组spark.sql("select * , count(name) over(partition by clazz) name_count from scores").show()

4.排序开窗函数

spark.sql("select * , row_number() over(order by score)  rank from scores").show()//先分区然后在排序 spark.sql("select * , row_number() over(partition by clazz order by score)  rank from scores").show()// 跳跃排序spark.sql("select * , rank() over(order by score)  rank from scores").show()//先分区在跳跃排序spark.sql("select * , rank() over(partition by clazz order by score)  rank from scores").show()// 连续排序spark.sql("select * , dense_rank() over( order by score)  rank from scores").show()//先分区在连续排序spark.sql("select * , dense_rank() over(partition by clazz order by score)  rank from scores").show()// 分组将数据分为N个组spark.sql("select * ,ntile(6) over( order by score)  rank from scores").show()

转载地址:http://jokzi.baihongyu.com/

你可能感兴趣的文章
500款各领域机器学习数据集,总有一个是你要找的
查看>>
收藏 | Linux常用156个命令汇总!
查看>>
十张图看懂未来大数据世界
查看>>
重磅!阿里开源AI核心技术,95%算法工程师受用
查看>>
"巧"仿蚂蚁森林水滴动效
查看>>
用算法撩妹都不会,别跟我说你是程序员
查看>>
“揭秘”大数据的10个神话!
查看>>
《中国区块链行业发展报告2018》全文发布!
查看>>
高盛发布区块链报告:从理论到实践(中文版)
查看>>
用Python从零开始创建区块链
查看>>
使用 Charles 抓取 app 数据包
查看>>
分析千万条数据后,终于找到了北上广深租金最低的地铁房
查看>>
dfrobot红外激光测距传感器的精度,测量距离和应用场景
查看>>
arduino扩展板引脚和连接图
查看>>
DFRduino Nano4.0介绍及原理图
查看>>
linux板级内存管理之-物理内存描述的两种实现方法
查看>>
App 调试的几个命令实践
查看>>
“独裁”的张小龙和他的微信帝国诞生记
查看>>
linux-arm中断系统之GIC
查看>>
Linux time subsystem 详解(1) ----概述
查看>>