开窗函数

首页 » Spark » 开窗函数

开窗函数只能在hive中使用
开窗函数格式:
row_number() over (partition by XXX order by XXX desc) as rank
rank是从1开始

package kc;

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

public class kaichuang {
public static void main(String[] args) {
 SparkConf conf = new SparkConf();
 conf.setAppName("windowfun");
 conf.set("spark.sql.shuffle.partitions","1");
 JavaSparkContext sc = new JavaSparkContext(conf);
 HiveContext hivecontext=new HiveContext(sc);
 hivecontext.sql("use saprk");
 hivecontext.sql("drop table if exists sales");
 hivecontext.sql("create table if not exists sales (riqi string,leibie string,jine Int) row format delimited fields terminated by '\t'");
 /*
  * 
  * 以类别分组
  * 
  * 1 a 10
  * 2 b 20
  * 3 a 30
  * 4 b 40
  * 5 a 50
  * 6 b 60
  * 
  * 
  * 排序后
  * 5 a 50 --rank 1
  * 3 a 30 --rank 2
  * 1 a 10 --rank 3
  * 6 b 60 --rank 1
  * 4 b 40 --rank 2
  * 2 b 20 --rank 3
  */
 DataFrame result = hivecontext.sql("select riqi,leibie,jine "
   + "from ("
   + "select riqi,leibie,jine,"
   + "row_number() over (partition by leibie order by jine desc) rank "
   + "from sales) t"
   + " where t.rank<=3");
 result.show(100);
 
 /*
  * 将结果保存到hive中
  */
 result.write().mode(SaveMode.Overwrite).saveAsTable("sales_result");
 sc.stop();
}
}
运行
/hadoop/spark-1.6.0/bin/spark-submit --master spark://node01:7077,node02:7077,node03:7077 --class kc.kaichuang kc2.jar
分享到:
赞(0) 打赏

评论 5

评论前必须登录!

 

  1. #1

    最好再详细点

    你好8个月前 (03-28)
  2. #2

    奥利给

    努力8个月前 (03-28)
  3. #3

    还可以

    hello8个月前 (03-28)
  4. #4

    记住这个网站了

    白云8个月前 (03-28)
  5. #5

    看了那么多博客,就你的能看懂

    小白8个月前 (03-29)

觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00