旅游扁平化设计网站模板,网站概要设计模板,网站建设人员管理制度,怎么在公司网站做超链接Spark SQL 开窗函数row_number的使用 窗口函数 row_number即为分组取topN参考文本#xff1a; 型号 类别 销售量/月小米,手机,250 华为,手机,450 苹果,手机,1000 三星,手机,2500 小米Pro,笔记本,1500 苹果Pro,笔记本,2000 …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());
// 创建销售额表 saleshiveContext.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);ListRow 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]