当前位置:   article > 正文

SparkSQL详解_spark sql

spark sql

一、spark SQL概述:

1.1什么是spark SQL:

Spark SQL是Apache Spark的一个模块,用于处理结构化数据。它提供了用于处理结构化数据的高级API和查询引擎,以及为处理大规模数据提供了优化和高性能的功能。

Spark SQL可以处理多种数据源,包括关系型数据库、Hive、Parquet、Avro、JSON等。它支持基于SQL的查询,并提供了DataFrame和DataSet这两个抽象概念,用于表示结构化数据。DataFrame类似于关系型数据库中的表,可以进行查询、过滤和聚合操作。而DataSet是DataFrame的类型安全版本,可以通过编译时检查来避免常见的错误。

Spark SQL的查询引擎支持常见的SQL操作,包括选择、投影、连接、聚合、排序等。它还提供了丰富的内置函数,用于数据转换、日期处理、字符串操作等。Spark SQL还支持用户自定义函数(UDF)和用户自定义聚合函数(UDAF),以便用户根据自己的需求扩展功能。

Spark SQL还具有优化查询的能力,它使用Catalyst优化器来对查询进行逻辑和物理优化。Catalyst优化器可以根据数据分布、数据类型和查询模式等因素来选择最佳的执行计划。此外,Spark SQL还支持列式存储、压缩和代码生成等技术,以提高查询性能。

总结起来,Spark SQL是Apache Spark中用于处理结构化数据的模块,它提供了高级API和查询引擎,支持多种数据源和常见的SQL操作,同时具有优化查询和高性能的特点。它使得用户可以使用SQL和关系型数据库的思维来处理大规模的结构化数据。

1.2spark SQL的特点:

1). 高性能:Spark SQL使用了列式存储和压缩技术,以及查询计划的优化和代码生成等技术,可以在处理大规模数据时提供高性能的查询和分析能力。

2 多数据源支持:Spark SQL可以处理多种数据源,包括关系型数据库、Hive、Parquet、Avro、JSON等。它提供了统一的API和查询语言,使得用户可以以统一的方式处理不同类型的数据。

3). SQL支持:Spark SQL提供了完整的SQL支持,用户可以使用标准的SQL语法进行查询、过滤、聚合等操作。这使得用户可以利用已有的SQL知识和经验来处理数据。

4). DataFrame和DataSet抽象:Spark SQL引入了DataFrame和DataSet这两个抽象概念,用于表示结构化数据。DataFrame类似于关系型数据库中的表,可以进行查询、过滤和聚合操作。而DataSet是DataFrame的类型安全版本,可以通过编译时检查来避免常见的错误。

5). 内置函数和UDF支持:Spark SQL提供了丰富的内置函数,用于数据转换、日期处理、字符串操作等。同时,它还支持用户自定义函数(UDF)和用户自定义聚合函数(UDAF),以便用户根据自己的需求扩展功能。

6). 扩展性:Spark SQL提供了许多可扩展的接口和机制,使得用户可以根据自己的需求来扩展和定制功能。用户可以自定义数据源、自定义优化规则、自定义函数等。

7). 统一的编程模型:Spark SQL与Spark的其他模块(如Spark Streaming和MLlib)紧密集成,使得用户可以使用统一的编程模型来处理不同类型的数据,从而简化开发和维护工作。

总之,Spark SQL具有高性能、多数据源支持、SQL和DataFrame/DataSet抽象、可扩展性和统一的编程模型等特点,使得用户可以以统一的方式处理大规模的结构化数据。

1.3什么是Dataframe:

DataFrame是Spark SQL中的一个重要概念,它可以看作是分布式数据集,以表格的形式组织和表示结构化数据。

DataFrame类似于关系型数据库中的表,它具有类似的行和列的结构。每一行代表一条记录,每一列代表一个属性或字段。DataFrame中的数据可以是各种类型,如整数、字符串、日期、数组、结构体等。

与传统的RDD(弹性分布式数据集)相比,DataFrame具有很多优点。首先,DataFrame提供了高性能的查询和处理能力,可以直接使用SQL语句进行查询、过滤、聚合等操作,而无需编写复杂的代码。其次,DataFrame支持列式存储和压缩,可以在处理大规模数据时提供更高的性能和更小的存储空间。此外,DataFrame还提供了丰富的内置函数和UDF(用户自定义函数)支持,可以方便地进行数据转换和计算。

DataFrame可以从多种数据源中创建,如关系型数据库、Hive表、Parquet、Avro、JSON等。Spark SQL提供了统一的API和查询语言,使得用户可以以一致的方式处理不同类型的数据。

在Spark SQL中,DataFrame是一个不可变的分布式数据集,可以进行转换和操作,生成新的DataFrame。由于DataFrame是惰性求值的,所以操作不会立即执行,而是等到需要结果时才进行计算。这使得Spark可以优化执行计划,并将多个操作合并为一个更高效的执行计划。

总之,DataFrame是Spark SQL中的核心数据结构,它提供了高性能的查询和处理能力,以及丰富的数据转换和计算功能,使得用户可以方便地处理结构化数据。

1.4什么是Dataset

DataSet是Spark SQL中引入的一个高级抽象概念,它在DataFrame的基础上提供了更强大的类型安全性和表达能力。

DataSet可以看作是强类型的分布式数据集,它与RDD和DataFrame类似,但具有更丰富的类型信息。每个DataSet都有一个编码器(Encoder),用于将对象转换为二进制数据来进行序列化和反序列化。这种类型安全性可以在编译时捕获错误,提供更好的错误检查和调试能力。

DataSet既可以通过编程接口创建,也可以通过DataFrame转换得到。与DataFrame类似,DataSet也支持SQL查询和操作。通过使用lambda表达式和函数式编程的方法,可以更容易地进行复杂的数据转换和计算。

与DataFrame相比,DataSet提供更高级的API和更丰富的功能。DataSet具有更丰富的操作符,可以方便地进行复杂的数据操作和转换。此外,DataSet还支持多种类型的连接操作、窗口函数、自定义聚合函数等高级特性。

虽然DataSet提供了更强大的类型安全性和表达能力,但在一些情况下,DataFrame仍然是更常用的选择。如果数据不需要进行复杂的类型处理,或者对性能要求较高,那么使用DataFrame可能更加简单和高效。

总之,DataSet是Spark SQL中的高级抽象概念,它提供了更强大的类型安全性和表达能力,使得用户可以更方便地进行复杂的数据操作和转换。

二、spark SQL编程

DataFrame操作:

show:查看DataFrame中的具体内容信息

        

 

selectExpr

selectExpr方法本质与select方法中使用expr函数是一样的,都是用来构建复杂的表达式,下面我们可以看几个例子。

df.selectExpr("appid as newappid").show()

上面这行代码,就是选择appid列并将appid重命名为newappid。

df.selectExpr("count(distinct(appid)) as count1", "count(distinct(brand)) as count2").show()

上面这行代码,就是计算appid去重后的数量,还有brand去重后的数量。

filter()

filter()方法

DF.col("id")等价于$"id",取列ColumnName

DF.filter("name=''")    过滤name等于空的行

DF.filter($"age" > 21).show()     过滤age大于21的行,必须增加语句:import spark.implicits._,否则$表达式会报错

DF.filter($"age" === 21)  取等于时必须用===,否则报错,对应的不等于是=!=。等价于DF.filter("age=21")

DF.filter("substring(name,0,1) = 'M'").show   显示name以M开头的行,其中substring是functions.scala,functions.scala包含很多函数方法,等价于DF.filter("substr(name,0,1) = 'M'").show 

groupBy():对记录进行分组

按照”age”分组,查看数据条数

Sort()方法:对指定字段进行排序操作

DF.sort(DF.col("id").desc).show    以DF中字段id降序,指定升降序的方法。另外可指定多个字段排序

=DF.sort($"id".desc).show

DF.sort 等价于DF.orderBy

RDD转换为DataFrame

注意:如果需要RDD与DF或者DS之间操作,那么都需要引入 import spark.implicits._ 【spark不是包名,而是sparkSession对象的名称】

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/785600
推荐阅读
相关标签
  

闽ICP备14008679号