SparkSQL窗口函数实操
概述
我们在数据分析过程中,会需要在数据集中按照某个维度进行分组,并且需要在组内进行一个类似排名、统计、相邻数据提取等分析操作。因此,在SQL 2003标准中,引入了窗口函数的能力。本文将基于Spark 3.0 版本的Spark SQL的窗口函数能力进行介绍,并给出一些实验示例。最后,基于主要的窗口函数能力,来介绍能够解决哪些业务场景的分析需求。
我们在数据分析过程中,会需要在数据集中按照某个维度进行分组,并且需要在组内进行一个类似排名、统计、相邻数据提取等分析操作。因此,在SQL 2003标准中,引入了窗口函数的能力。本文将基于Spark 3.0 版本的Spark SQL的窗口函数能力进行介绍,并给出一些实验示例。最后,基于主要的窗口函数能力,来介绍能够解决哪些业务场景的分析需求。
Spark SQL是Apache Spark中的一个新模块,用于将关系处理和Spark的函数编程API相集成。基于Shark的经验,Spark SQL使得Spark开发者能够充分利用关系处理(声明式查询和优化后的存储)的优势以及让SQL用户调用Spark中复杂的分析库(如机器学习)。与之前的系统相比,Spark SQL主要有两个优势:一是在关系型和过程处理间集成更加紧密,通过一个声明式的DataFrame API来集成过程式Spark代码。二是包含了一个高扩展性的优化器Catalyst,使用Scala编程语言特性构建,使得添加可组合的规则、控制代码生成和定义扩展点比较容易。使用Catalyst,我们已经构建了许多特性(如JSON方式的模式引用,机器学习类型以及外部数据库的联邦查询)来满足现代数据分析的复杂需求。我们认为Spark SQL是Spark上的SQL和Spark本身的一种进化,它提供了更丰富的API和优化,同时保留了Spark编程模型的优点。
Apache Calcite是一个基础软件框架,提供了查询处理、优化和查询语言,支持多个主流开源数据处理系统,比如Apache Hive,Apache Storm,Apache Flink,Druid和MapD。Calcite的架构由如下组件构成:
转载自 微信公众号 | IT人的职场进阶 (前亚马逊工程师,现58转转技术总监)
“我,程序员,32岁,距离退休,只剩3年了!”
这句话用来形容2019年互联网行业最适合不过了。从18年开始,大大小小的互联网公司开始了不止一轮的裁员,19年网上开始充斥一类文章,专门写互联网公司超过35岁的人,如果到这个年龄,还不是leader,业务又不核心,那么请焦虑吧。
数据库之所以有行存和列存之分,主要是为了满足不同的使用场景。我们常见的Oracle、MySQL等主流关系型数据库都是以行存为主,适合OLTP的应用,涉及事务处理、增删改查等操作。随着大数据的发展,新兴的Vertica、Greenplum、MonetDB、C-Store等数据库支持列式存储,适合OLAP的应用,涉及海量数据的分析操作。甚至业界一些数据库为了同时支持OLTP和OLAP的能力,采用行列混合存储的模式,来兼容这两种应用场景。因此,数据库采用不同的数据存储布局,决定了它本身对外支持的特性,用户据此并结合业务场景来选择合适的数据库产品。下面,本文将主要针对行列存储的概念、组织形式、优缺点进行简要介绍。