Spark SQL 开窗函数row_number的使用
华为,手机,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();
}
}
开窗函数格式:
* 【 row_number() over (partition by XXX order by XXX) as rank】//起个别名
* 注意:rank 从1开始
[华为,平板电脑,300]
[三星,平板电脑,200]
[三星,手机,2500]
[苹果,手机,1000]
[华为,手机,450]
[华硕,笔记本,10000]
[三星Pro,笔记本,4100]
[苹果Pro,笔记本,2000]
469



被折叠的 条评论
为什么被折叠?



