有类型转换_groupByKey | 学习笔记

简介: 快速学习有类型转换_groupByKey

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

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


有类型转换_groupByKey


有类型转换_groupByKey:

 

上节课简单了解了这个过滤,接下来学习聚合操作,其实也就是一个算一个算子,叫做 groupByKey,它虽然是一种聚合,但其实它也是有类型的。

image.png 

接下来进入到我们的 idea 当中,进行代码编写:

def groupByKey():Unit = {

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

Person(“zhangsan”,16),Person(“list”,20)).toDS()

//select  count(*) from person group by name,这是一个 count 聚合

val grouped:KeyValueGroupedDataset[string,Persion]

=_ds.groupByKey( person => person.name)//括号里的函数是要返回 Key 的

val result:Dataset[string,Long] = grouped.count()

//这里面的 count 并不是 Dataset 里面的 action 行,而是 KeyValueGroupedDataset 聚合的一个操作算子

result.show()

}

}

创建完这个 dataset,就可以进行相应的操作。这个与 rdd 是有区别,

groupByKey 是为了要一个 Key,这个 Key 就通过一个函数来给。

看一下这样的对象 grouped 类型是 KeyValueGroupedDataset,

String 是 Key 的类型,Persion 是 Value 的类型,没有 grouped.show 这个方法,

因为点进去 KeyValueGroupedDataset

你会发现它根本就不是 Dataset,这是一个其他的类型,直接就叫做 KeyValueGroupedDataset,直接继承了 Serilizable。这个东西 KeyValueGroupedDataset 本质上来讲,它里面就是放置的分区结果,它里面存的是一个又一个的分组,那么可以想一想,在使用的语句来进行分组的时候,往往都有一次聚合。

没有聚合,分组是没意义的,哪怕是取这个组当中第一个元素,这也是聚合,所以,我们是用不了 grouped.show 这个方法的,除非你先进行聚合。

通过 KeyValueGroupedDataset 的 grouped.count() 的方法返回的类型是 Dataset 类型,grouped.count()这个里面是分组,转换为 Dataset 类型才能进行 action 求得结果,调用聚合方法进行转换,大家可能会有疑惑的,grouped 当中都有什么聚合方法呢?那么同时,为什么说它是一个类型的操作呢。

首先里面有一个方法叫做 cogroup,,这是一个有类型的操作,flatMapGroups 对 Groups 进行 flatMap,也是一个有类型的操作,那同时这些都是聚合操作。

在 rdd 当中也有 cogroup,就是一个协同分组,然后呢,你可以通过 keys 来去获取到其中所有的 Key。然后可以转换每一个分组,然后呢,还可以再去 reduceGroups,这个时都注意到了,其实,它们进行的就是一个聚合的操作,比如 reduceGroups、cogroup,还有呢,就是我们的这样的一个大致的操作,那么我们就通过这个获取的结果。Results show 打印一下结果:

image.png 

这个时候结果已经获取到了,那么其实我们就是对这个 Person ,对这个 dS 按照 name 进行分组,然后去求了一个 count ,转换成 Dataset,并且 result show 出结果。

以上就是无类型转换_groupByKey。

相关文章
|
6月前
|
SQL 分布式计算 编译器
Scala:高阶函数、隐式转换(四)
Scala:高阶函数、隐式转换(四)
54 0
|
分布式计算 大数据 Spark
有类型转换_split_ | 学习笔记
快速学习有类型转换_split_
111 0
有类型转换_split_ | 学习笔记
RxSwift操作符操作符map、flatMap、flatMapLatest、filter的使用与区别
RxSwift操作符操作符map、flatMap、flatMapLatest、filter的使用与区别
381 1
|
分布式计算 大数据 Scala
有类型转换_集合操作 | 学习笔记
快速学习有类型转换_集合操作
有类型转换_集合操作 | 学习笔记
|
SQL 大数据 API
无类型转换_groupBy | 学习笔记
快速学习无类型转换_groupBy
无类型转换_groupBy | 学习笔记
|
分布式计算 大数据 API
有类型转换_去重 | 学习笔记
快速学习有类型转换_去重
有类型转换_去重 | 学习笔记
|
SQL 分布式计算 大数据
有类型转换_orderBy | 学习笔记
快速学习有类型转换_orderBy
146 0
有类型转换_orderBy | 学习笔记
|
分布式计算 大数据 Spark
Rdd 算子_转换_集合操作 | 学习笔记
快速学习 Rdd 算子_转换_集合操作
Rdd 算子_转换_集合操作 | 学习笔记
|
SQL 分布式计算 安全
有类型转换_map | 学习笔记
快速学习有类型转换_map
有类型转换_map | 学习笔记
|
分布式计算 大数据 开发者
Rdd 算子_转换_groupbykey | 学习笔记
快速学习 Rdd 算子_转换_groupbykey
144 0
Rdd 算子_转换_groupbykey | 学习笔记