有类型转换_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。

相关文章
|
消息中间件 运维 监控
深入解析Kafka中Replica的妙用
深入解析Kafka中Replica的妙用
676 0
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
690 0
|
2月前
|
SQL 数据库 数据安全/隐私保护
SQL基础:DDL、DML、DCL和TCL的区别与使用
本文详细解析了SQL语言的四大类别:数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)和事务控制语言(TCL),涵盖每类语句的功能、语法、使用场景及示例。
|
分布式计算 大数据 Spark
大数据Spark DataFrame/DataSet常用操作3
大数据Spark DataFrame/DataSet常用操作3
169 0
|
10月前
|
SQL 存储 大数据
Flink 基础详解:大数据处理的强大引擎
Apache Flink 是一个分布式流批一体化的开源平台,专为大规模数据处理设计。它支持实时流处理和批处理,具有高吞吐量、低延迟特性。Flink 提供统一的编程抽象,简化大数据应用开发,并在流处理方面表现卓越,广泛应用于实时监控、金融交易分析等场景。其架构包括 JobManager、TaskManager 和 Client,支持并行度、水位线、时间语义等基础属性。Flink 还提供了丰富的算子、状态管理和容错机制,如检查点和 Savepoint,确保作业的可靠性和一致性。此外,Flink 支持 SQL 查询和 CDC 功能,实现实时数据捕获与同步,广泛应用于数据仓库和实时数据分析领域。
6886 32
|
10月前
|
存储 监控 druid
Druid、ClickHouse、Doris、StarRocks 的区别与分析
本文对比了 Druid、ClickHouse、Doris 和 StarRocks 四款大数据分析引擎。它们均为 OLAP 引擎,采用列式存储和分布式架构,适用于海量数据分析。Druid 擅长实时分析与高并发查询;ClickHouse 以超高性能著称,适合复杂查询;Doris 提供易用的 SQL 接口,性能均衡;StarRocks 则以其极速查询和实时更新能力脱颖而出。各引擎在数据模型、查询性能、数据更新和存储方面存在差异,适用于不同的业务场景。选择时需根据具体需求综合考虑。
4944 20
|
存储 消息中间件 分布式计算
Spark Streaming
Spark Streaming
271 1
|
存储 负载均衡 NoSQL
一文让你搞懂 zookeeper
一文让你搞懂 zookeeper
18678 16
|
机器学习/深度学习 分布式计算 大数据