Spark SQL 开窗函数row_number的使用

窗口函数 row_number即为分组取topN
参考文本:                   型号                      类别            销售量/月
小米,手机,250
华为,手机,450
苹果,手机,1000
三星,手机,2500
小米Pro,笔记本,1500
苹果Pro,笔记本,2000
三星Pro,笔记本,4100
华为ProX,笔记本,200
华硕,笔记本,10000
苹果,平板电脑,100
三星,平板电脑,200
华为,平板电脑,300
中兴,平板电脑,400
需求分析 : 根据文本中的类别进行分组,取月销售额的前三名:
代码:
package com.bynear.spark_sql;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SaveMode;
import org.apache.spark.sql.hive.HiveContext;

import java.util.List;

public class RowNumberWindowFunction {public static void main(String[] args) {SparkConf conf = new SparkConf();
        JavaSparkContext sc = new JavaSparkContext(conf);
        HiveContext hiveContext = new HiveContext(sc.sc());
//        创建销售额表 sales
        hiveContext.sql("drop table if exists sales");
//        hiveContext.sql("create table if not exists sales (product string, category string, revenue BIGINT)
//          row format delimited\\n\" +\n" +
//                "               \"    fields terminated by ','");

        hiveContext.sql("create table if not exists sales (product string, category string, revenue bigint) row format delimited fields terminated by ',' "
        );

        hiveContext.sql("load data inpath" +" 'hdfs://Spark01:9000/zjs/sales.txt' into table sales ");
//
        DataFrame top3SalesDF = hiveContext.sql("select product,category,revenue from (select product, category, revenue, row_number() over (partition by category order by revenue DESC ) rank from sales ) tmp_sales where rank <=3");
        hiveContext.sql("drop table if exists top_sales");
        hiveContext.sql("create table top_sales (product string, category string, revenue bigint) ");

        top3SalesDF.write().mode(SaveMode.Append).insertInto("top_sales");
        List<Row> rows = top3SalesDF.javaRDD().collect();
        for (Row row : rows) {System.out.println(row);
        }top3SalesDF.write().format("json").save("hdfs://Spark01:9000/zjs/JSON");

        sc.close();
    }
}
注意点:文本中尽量使用英文逗号进行分割! 如果在hive库中出现 按照逗号分割之后,每行的结尾出现 NULL, 即为编码的问题!需要将文本转化为UTF-8格式,问题解决。
重点在于SQL语句中的 row_number,查看括弧是否匹配齐全!
在我的集群出现的问题!使用saveASTable方法的时候,集群直接报错!没有办法,只能使用insertInto方法了,但是必须要在代码中,手动去创建一个表,来存储最
终的结果!使用insertInto方法把结果insert到创建好的表中!
问题:为什么在我的集群中,将用例文件上传到 集群上之后,每运行一下Spark命令之后,集群上的用例文本就会被删除掉!该如何解决!
希望大佬们给出解决的方法!
开窗函数格式:* 【 row_number() over (partition by XXX order by XXX) as rank】//起个别名* 注意:rank 从1开始
运行结果:
[中兴,平板电脑,400]
[华为,平板电脑,300]
[三星,平板电脑,200]
[三星,手机,2500]
[苹果,手机,1000]
[华为,手机,450]
[华硕,笔记本,10000]
[三星Pro,笔记本,4100]
[苹果Pro,笔记本,2000]

Spark SQL 开窗函数row_number的使用相关推荐

  1. mysql开窗函数_魔幻的SQL开窗函数,为您打开进阶高手的一扇天窗

    经常写SQL脚本的朋友,通常会有一种迷之自信,似乎各种问题都有自己的一套解决方案.时间长了,人的思维可能会逐渐固化.思维固化能提高工作效率,但从某些角度看是很可怕的,我们也同时会失去接受新知识的内在动 ...

  2. spark SQL自定义函数:

    spark SQL 自定义函数: 自定义函数: 第一种:  U D F  (用户自定义函数)函数 特点:  一对一的关系,输入一个值以后输出一个值  (一进一出) 大部分的内置函数都是U D F函数 ...

  3. SQL开窗函数之前后函数(LEAD、LAG)

    开窗函数 当我们需要进行一些比较复杂的子查询时,聚合函数就会非常的麻烦,因此可以使用开窗函数进行分组再运用函数查询.窗口函数既可以显示聚集前的数据,也可以显示聚集后的数据,可以在同一行中返回基础行的列 ...

  4. SQL开窗函数(窗口函数)详解

    一.什么是开窗函数 开窗函数/分析函数:over() 开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数. 开窗函数的调用格式为: 函数名(列名) OVER(partition by ...

  5. sql开窗函数及编程练习题

    今天做题碰见了个没见过的开窗函数 什么是开窗函数 开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数. 聚合开窗函数就是我们常见的avg().count().sum()等.SQL 标 ...

  6. SQL SERVER 函数ROW_NUMBER() 应用

    应用场景: 1.业务要求SQL查询结果中输出含有"序号"."行号". 2.数据表中某个空白字段需要用流水号填充. 以上场景时,可以使用SQL SERVER 的函 ...

  7. Hive SQL开窗函数详解

    Hive 开窗函数 group by 是分组函数,一组出来一个数据 over() 开窗,针对每一条数据,都有一个独立的组 mk 3 jk 3 mk 3 select orderdate,cost,su ...

  8. SQL 开窗函数使用

    好多次笔试面试的题都考到开窗函数,若对开窗函数不了解,真的吃了好大的亏,今天花点时间整理一下. 此文章整理的知识点部分来自:https://www.cnblogs.com/lihaoyang/p/67 ...

  9. Spark SQL自定义函数_第五章

    1.自定义函数分类 类似于hive当中的自定义函数, spark同样可以使用自定义函数来实现新的功能. spark中的自定义函数有如下3类 1.UDF(User-Defined-Function) 输 ...

最新文章

  1. fastReport 随记
  2. oracle sql删除job,修改Oracle的Job Scheduler 日志级别及删除运行日志
  3. 【Python之os模块】使用
  4. 美国域名总量跌至7971万:4月上旬降幅缩小32.4%
  5. python 并发编程 多线程 event
  6. jquery复制粘贴
  7. cesium 构建天空盒
  8. VS2010提示asp.net v4.0 尚未在web服务器上注册
  9. linux培训哪家好?Linux520内部培训教程
  10. swiper 插件里面嵌套可滚动内容
  11. 计算机用什么命令调取共享记录,只需一串代码命令就可以获取你的电脑所有的无线网历史连接记录?...
  12. php crc16计算,如何在PHP HEX中计算CRC16 CCITT?
  13. 一个不错的SQLserver 数据库比较软件
  14. 解决phpmyadmin 访问卡慢等问题
  15. 国庆节,一天开发一个小程序+Web系统。2.5K到手。【分享开发经验】【收藏起来】
  16. java 中wav文件格式,Wav音频文件格式详解
  17. Win11 0x80073cf9 我们这边出了错
  18. 业内首档程序员真人秀?这不比博人传热血???
  19. 音乐标签修改 android,mp3标签-mp3标签修改器 安卓版v4.0-PC6安卓网
  20. 魔都地铁租房的时间和租金测算

热门文章

  1. imatest软件的学习 及使用
  2. 百度地图大数据可视化(柱状图)
  3. js修改input file标签样式
  4. 圆角边框属性 圆角边框画芒果
  5. React 属性验证 propTypes
  6. Python爬去樱花动漫 超简单
  7. 16个使用精美字体的欧美网页设计欣赏
  8. 向AngularJS应用程序添加CSS动画
  9. Ps制作信号干扰故障风艺术效果动图
  10. abaqus切削为什么没有切屑_教你如何用Abaqus模拟金属切削