zoukankan      html  css  js  c++  java
  • 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在某个区间的记录,

  • 相关阅读:
    http状态码
    闭包
    节流和防抖
    继承方式
    array和object对比
    排序算法
    算法题
    汇编 asm 笔记
    FFMPEG 内部 YUV444P016 -> P010
    FFMPEG 内部 YUV444p16LE-> P016LE
  • 原文地址:https://www.cnblogs.com/benfly/p/12988815.html
Copyright © 2011-2022 走看看