无类型转换_groupBy | 学习笔记

简介: 快速学习无类型转换_groupBy

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:无类型转换_groupBy】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/690/detail/12077


无类型转换_groupBy

 

两个类型的分子,一个叫做剪除,一个叫做聚合。

为什么聚合称之为叫做无类型?

剪除就是一个 drop

val ds= ( Seq(Person(“zhangsan”,12),

Person(“zhangsan”,8),Person(“list”,15)).toDS()

ds.drop(‘age).show()

//当中有两列,一列是 name,一列是 age,可以通过 drop 把 age 剪除掉,drop 就是剪除掉一列。

在这个 SQL 语句当中肯定也写过 drop table,其实就是丢弃的意思,叫做剪除,剪除某个列。然后还有一个叫做 groupBy,前面在有类型的转换操作当中也提到了一个 groupBy,叫做 groupByKey,这个地方就直接叫 groupBy,groupByKey 是一个有类型的,groupBy 是一个无类型的。

进入到 idea 当中就创建一个新的方法,命名为叫做 groupBy。

def groupBy(): Unit =  {

val ds= ( Seq(Person(“zhangsan”,12),

Person(“zhangsan”,8),Person(“list”,15)).toDS()

ds.drop(‘age).show()

//首先思考为什么 groupByKey 是一个有类型的

ds.groupByKey(item =>_item.name).agg

//groupByKey 返回 key value group 的这样的一个对象,这个对象必须先执行一个聚合,比如说可以加入 agg,就是聚合的意思,还可以是 Cogroup,flat map groups,reduce,还有 map values。这些算子,也就是说 groupByKey 生成的那个对象,它里面的这些算子是有类型的。

这是最主要的原因。比如说 mapValues()(ds.groupByKey(item =>_item.name).mapValues)是一个有类型的,最主要的原因 groupByKey 所生成的对象的算子是有类型的。

//其次是思考为什么 groupBy 是一个无类型的

import org.apache,spark.sql.functions._

ds.groupBy(‘cols =’name).agg(mean(columnName =”name”)).show()

groupBy 在一开始就跟 groupByKey 是不一样的,比如说我们 group by 可以直接按照某一列来进行 group(‘cols =’name),这就比直接这个地方(item =>_item.name)返回一个函数要舒服。这里面的方法,avg 、max、mean、pivot、sum 与类型没关系,按照哪一列进行 max,也就是 SQL 语句当中那个 select max.....,Select mean.....,然后 agg 是聚合,也是按照 column 来聚合。

所以 groupBy 是一个无类型的主要是因为 groupBy 所生成的那个对象是无,类型里面的算子是无类型。这个时候就知道如何使用 groupBy 与 groupByKey。根据个人喜好进行选择,最好是选择 groupBy,但有的时候,确实有极个别的场景 groupBy 做不到,只能用 groupByKey,但确实不是那么常见。因为 SQL 使用这么久,没有理由必须得用有类型的 API。

接下来导入 import org.apache,spark.sql.functions._,就可以对其求一个 mean,mean 按照 age 列来进行求,就是一种统计的方式,统计完了以后,就进行 show,agg 是 groupBy 所生成的 Relation GroupedDataset 的这样的一个类型的算子,这是一个必须要求先聚合的一个算子,groupByKey 生成的是一个叫做 keyValueGroup 的一个类型的对象,跟这个地方 Relation GroupedDataset 有一点区别。

image.png

运行一下

按理说所生成的结果应该是按照年龄的,求一个均数。

结果进行分析,首先是 groupBy 按照 name 进行分组,对每一组的数据求一个均数,应该分为两组,第一组是两个 zhangsan,第二组是一个 lisi,求出来的均数是 zhangsan10 岁和 lisi15 岁。这就是结果。

以上就是无类型转换_groupBy 的内容。

相关文章
|
6月前
|
C++
C/C++数据类型转换函数大全
【代码】C/C++数据类型转换函数大全。
49 0
|
6月前
|
SQL 开发框架 .NET
C#进阶-LINQ表达式之GroupBy分组查询
本篇文章我们将演示LINQ扩展包基础语法里的GroupBy分组查询,并实现投影等实际操作中常用的类型转换手法。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
277 0
|
分布式计算 大数据 Spark
有类型转换_split_ | 学习笔记
快速学习有类型转换_split_
111 0
有类型转换_split_ | 学习笔记
|
6月前
|
C#
C#数据类型转换
C#数据类型转换
39 0
|
存储 C语言
还不进来看吗?c趁你不注意偷偷将你的数据类型转换啦
还不进来看吗?c趁你不注意偷偷将你的数据类型转换啦
53 0
|
SQL 分布式计算 大数据
有类型转换_orderBy | 学习笔记
快速学习有类型转换_orderBy
146 0
有类型转换_orderBy | 学习笔记
|
分布式计算 大数据 Spark
有类型转换_groupByKey | 学习笔记
快速学习有类型转换_groupByKey
122 0
有类型转换_groupByKey | 学习笔记
|
分布式计算 大数据 API
有类型转换_去重 | 学习笔记
快速学习有类型转换_去重
有类型转换_去重 | 学习笔记
|
分布式计算 大数据 Scala
有类型转换_集合操作 | 学习笔记
快速学习有类型转换_集合操作
有类型转换_集合操作 | 学习笔记
|
分布式计算 大数据 Spark
有类型转换_filter | 学习笔记
快速学习有类型转换_filter
有类型转换_filter | 学习笔记