• SparkSQL 数据分页及Top N


    在SparkSQL实践中,取出满足指定条件的数据并显示,如果因为数据太多,必须要有分页功能,一开始,想到的是select top N的方式,但测试过后,SparkSQL中并不支持这种语法,查了SparkSQL的帮助,spark支持类似mysql的limit语法,如下例所示,limit表示取出满足条件的前N条记录:

    val df = spark.sql("select a, b from tb1 where a>100 limit 10")

    但limit仅仅实现了非常简单的类似top N的功能,还不能很好的查找某个区间范围的记录,比如分页显示,那还有什么其它方法吗?

    当然,还有更好的方法,在SparkSQL中,有一项更好的功能,row_number,这是一个窗口函数(window function),从spark1.5版本引入,语法格式为:

    row_number() over (partition by 'xx' order by 'yy' desc) rank
    具体含义为:根据表中字段进行分组(partition by),然后根据表中的字段排序(order by),对于每个分组,给每条记录添加一个从1开始的行号
    如果不使用partition by语句,则表示对整个dataframe表添加行号
     

    对此行号做分页查询,下面是一个例子:

    val df3 = spark.sql("select Cusip, SecurityType, Share, rank from (select *,row_number() over (order by Date , AccountNumber desc) as rank from holding where Month = "2000-06") temp 
    where 3 < rank and rank <= 9")

    在上面sql中,取出的是满足rank在某个区间的记录,

  • 相关阅读:
    linux 共享内存 信号量 同步
    进程间通信 共享内存
    linux 多进程绑定问题
    C 语言调用python 脚本函数
    C 语言 和 python 调用 .so 文件
    好好学习
    three.js
    AMD、CMD、UMD 模块的写法
    webpack查缺补漏
    什么是 Web 服务器(server)
  • 原文地址:https://www.cnblogs.com/benfly/p/12988815.html
Copyright © 2020-2023  润新知