窗口函数又叫着窗口分析函数,Spark 1.4版本SparkSQL支持窗口分析函数,主要用于分组函数;理解窗口函数,可以参考blog去了理解:
http://www.cnblogs.com/CareySon/p/3411176.html
数据准备(用空格隔开)
Spark 100
Hadoop 65
Spark 99
Hadoop 61
Spark 195
Hadoop 60
Spark 98
Hadoop 69
Spark 91
Hadoop 98
Spark 88
Hadoop 99
Spark 68
Hadoop 60
Spark 79
Hadoop 97
Spark 69
Hadoop 96
代码编写
package com.imf.spark.sql
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.hive.HiveContext
object SparkSQLWindowFunctionOps {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
conf.setAppName("SparkSQLWindowFunctionOps for scala")
conf.setMaster("spark://master1:7077")
val sc = new SparkContext(conf)
val hiveContext = new HiveContext(sc);
hiveContext.sql("use testdb")//使用hive中的testdb数据库
hiveContext.sql("drop table if exists scores")
hiveContext.sql("create table if not exists scores(name String,score int) "
+"ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\\n'")
hiveContext.sql("load data local inpath '/usr/local/sparkApps/SparkSQLWindowFunctionOps/TopNGroup.txt' INTO TABLE scores")
/**
* 使用子查询的方式完成目标数据的提取,在目标函数内幕使用窗口函数row_number来进行分组排序:
* partition by :指定窗口函数分组的key
* order by :分组后进行排序
*/
val result = hiveContext.sql("select name,score "
+" from ( "
+" select name,score,row_number() over(partition by name order by score desc)rank from scores ) sub_scores"
+" where rank <=4")
result .show();//在Driver的控制台上打印出结果内容
//保存到hive数据仓库中
hiveContext.sql("drop table if exists sortedResultScores")
result.saveAsTable("sortedResultScores")
}
}
调度脚本
/usr/local/spark/spark-1.6.0-bin-hadoop2.6/bin/spark-submit \
--class com.imf.spark.sql.SparkSQLWindowFunctionOps \
--files /usr/local/hive/apache-hive-1.2.1-bin/conf/hive-site.xml \
--master spark://master1:7077 \
/usr/local/sparkApps/SparkSQLWindowFunctionOps/SparkSQLWindowFunctionOps.jar
查看结果
hive> show tables;
OK
people
peopleresult
peoplescores
scores
sortedresultscores
student
student2
student3
student4
tbsogou
tmp_pre_hour_seach_info
Time taken: 0.395 seconds, Fetched: 11 row(s)
hive> select * from scores;
OK
Spark 100
Hadoop 65
Spark 99
Hadoop 61
Spark 195
Hadoop 60
Spark 98
Hadoop 69
Spark 91
Hadoop 98
Spark 88
Hadoop 99
Spark 68
Hadoop 60
Spark 79
Hadoop 97
Spark 69
Hadoop 96
Time taken: 2.426 seconds, Fetched: 18 row(s)
hive> select * from sortedresultscores;
OK
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Spark 195
Spark 100
Spark 99
Spark 98
Hadoop 99
Hadoop 98
Hadoop 97
Hadoop 96
Time taken: 0.229 seconds, Fetched: 8 row(s)
分享到:
相关推荐
5. **Spark SQL内置函数与窗口函数**:深入讲解Spark SQL的内置函数,包括聚合、转换、统计等,以及如何使用窗口函数进行复杂的时间序列分析。 6. **Spark SQL UDF与UDAF**:用户定义的函数(UDF)和用户定义的聚合...
读者还将学习到如何使用Spark SQL进行数据清洗、数据转换,以及如何利用窗口函数进行时间序列分析和分组统计。此外,书中的案例研究和实战项目将帮助读者掌握Spark SQL在实际工作中的应用,比如大数据报表生成、实时...
- **窗口函数**:提供类似SQL的窗口函数,如row_number、lead、lag、rank等,用于处理时间序列数据和排名问题。 - **UDF(用户自定义函数)**:可以注册自定义函数,扩展Spark SQL的功能。 - **Join操作**:支持...
在Spark SQL和DataFrame API中,窗口函数提供了一种灵活的方式来对数据分组并进行计算,同时考虑了数据的时间上下文。 标题“Spark的window窗口函数”指的是Spark SQL或DataFrame API中用于处理时间相关数据的函数...
Flink SQL遵循SQL标准,提供了丰富的窗口函数和连接操作,使得开发者能够更容易地处理实时数据流。 Sparkflink运行命令解析器可能是为了统一管理和调度Spark和Flink任务而开发的工具。它可以解析用户提交的命令,...
这包括选择列、过滤行、聚合函数、窗口函数等操作。 7. **数据清洗和预处理**:在大数据分析中,数据预处理通常是必不可少的步骤。本章节可能会介绍如何处理缺失值、异常值,以及数据类型转换等常见问题。 8. **...
在SQL查询方面,书中有详尽的SQL语法介绍,包括创建、查询和管理Spark SQL数据库及表,以及使用JOIN、GROUP BY、窗口函数等复杂查询。同时,还会探讨如何使用Spark SQL进行数据分析和数据挖掘,例如时间序列分析、...
- **窗口函数**: 支持窗口函数,如`row_number()`, `lead()`, `lag()`等,进行复杂的数据分析。 - **Joins**: 提供不同类型的join操作,包括内连接、外连接和全连接。 - **UDF(用户自定义函数)**: 可以注册Java...
使用Spark SQL,我们可以处理大规模的点击日志,例如,通过窗口函数计算用户最近的点击行为,找出热门页面,或者基于用户的点击历史构建推荐模型。 4. Spark SQL与数据源: Spark SQL支持多种数据源,包括HDFS、...
6. **高级特性**:涵盖窗口函数、时间序列处理、复杂数据类型处理、流处理(Structured Streaming)等进阶主题。 7. **源码分析**:通过对Spark SQL源码的剖析,理解其内部工作原理,如数据处理流程、查询优化、...
Spark SQL支持窗口函数,这在处理时间序列数据和排名问题时非常有用,例如计算累计和、滑动平均等。 总的来说,Spark SQL通过提供高性能、易于使用的接口,以及对SQL和Hive的兼容性,极大地简化了大数据分析任务。...
该项目旨在改进 Spark SQL 的窗口函数。 它目前正在进行中。 此实现需要 SPARK 1.4.0 提供的功能。 改进 与当前实现相比的优点是: 本机 Spark-SQL,当前实现仅依赖于 Hive UDAF。 新的实现使用 Spark SQL 聚合。 ...
6. **SQL支持**:Spark SQL支持标准的SQL语法,包括SELECT、FROM、WHERE、GROUP BY等子句,同时也提供了一些Spark特有的功能,如窗口函数、UDF(用户定义函数)等。 7. **数据源API**:Spark SQL引入了统一的数据源...
例如,你可以编写一个SQL查询,该查询包含了多个JOIN、GROUP BY和窗口函数,Spark SQL会生成一个高效的执行计划来处理这些操作。 总结一下,"Intro to DataFrames and Spark SQL"的培训将涵盖如何使用DataFrame API...
- **Window Functions**: 通过窗口函数(如ROW_NUMBER、RANK、LEAD、LAG、DENSE_RANK等),可以在数据流中定义窗口并进行复杂的计算。 ### 6. Join操作 - **Inner/Outer/Full Join**: Spark SQL支持不同类型的JOIN...
Spark SQL还支持一系列的集合函数、日期和时间函数以及窗口聚合函数。通过定义用户定义函数(UDFs),开发者可以扩展Spark SQL内建函数的库,实现自定义的计算逻辑。UDFs是封装为黑盒函数,除非必要,否则不建议大量...
本项目涉及的核心知识点包括Spark Core、Spark SQL和Spark Streaming,同时结合了Scala和Java编程语言,以及Maven构建工具,实现了混合框架的搭建。下面将详细阐述这些关键点。 1. **Spark Core**:作为Spark的基础...
Spark SQL提供了一系列内置的标准函数和聚合函数,用户可以直接使用这些函数来执行常见的数据处理任务,如日期和时间的处理、窗口函数等。 11. 用户自定义函数(UDF) 用户可以定义自己的函数(UDF),从而在SQL...
在Python数据科学中,PySpark是...这只是一个基础的PySpark SQL概述,实际上,它还包括窗口函数、聚合操作、连接、分组、排序等更多功能。理解并熟练掌握这些概念和操作对于在Python环境中进行大数据分析至关重要。
8. **数据处理**:SparkSession提供了丰富的函数和操作,如聚合、过滤、连接、窗口函数等,用于数据清洗、转换和分析。 9. **并行计算**:Spark SQL利用分布式计算的优势,将大型数据集分割成小块,在多台机器上...