Rdd 算子_转换_groupbykey | 学习笔记

简介: 快速学习 Rdd 算子_转换_groupbykey

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

课程地址:https://developer.aliyun.com/learning/course/689/detail/11972


Rdd 算子_转换_groupbykey


内容介绍:

一、序言

二、group by key的原理

三、group by key 的使用

四、Reduce by key 能不能在 map 端做 combiner

 

一、序言

在前面的学习中,了解到一个算子,是一个聚合操作,就是 reduce by key,它的作用是按照 key 来进行聚合,根据key 来进行分组,然后再把每一组数据进行 reduce 操作,就得到 reduce by keyReduce by key本质上还是一个reduce 操作,但如果我只是想进行分组的话,是不合适。如果只进行分组操作,这是就需要用到 group by key,这个算子就是按照 key 来进行分组即 group

 

二、group by key的原理

如下图所示:

image.png

首先最根本上来讲 group 它也是一个 sheffeld 操作,因为上面有一个 a1这样的一个元素,也是一个 key value,那在第二部分有一个 a1的部分。

那么他们俩的 key 是否一样?但是他俩的分区不一样,所以这两个数据要发往同一个 reduce 的分区,这个时候就看到两个一样的 key,最终生成了一个结果,结果当中 value 的位置是一个数组,那么这个数组里面是两个元素各自动使用,那这就是 group by key 的原理,那至少它是一个是 sheffeled。还有一个特点是,如果后面带的是 by key 那么后面只能处理 key value 的数据。

 

三、group by key 的使用

进入到 IDEA 中,如何实现该方法。先拷贝集合的定义,有了集合之后,直接进行 group by key 操作,group by key不需要接受 function 函数,因为 group by key 是一个 group 操作,按照 key 来进行 group 操作,接下里进行收集结果。

@Test

def groupByKey():Unit =(

sc.parallelize(Seq(("a",1),("a",1)("b",1)))·groupByKey()

.collect()

.foreach(item => println((item)


运行结果如下:

image.png

后面生成了一个类似于数组的东西,里面放置了俩个 key a 的所有值。group by key 的结果形式首先还是一个元祖,元组的第一个位置还是 key,第二个位置是一个 compact,类似于集合,用集合来表示(Kvalue1)(value2))

 

四、Reduce by key 能不能在 map 端做 combiner

1.能不能减少 ioCombiner 最根本的意义是为了减少 ioreduce by key 一个分区只有一条数据,和出来一个分区出来,显然是后者数据更多,所以 Reduce by key map combiner 有意义的,但 group by key  map 段做combiner 是无意义的。因为要进行的是 group 操作,那么在 map 端,进行 combiner 之后,这些数据还要返回来,减少的 io 很少。

reduce by key group by key 有很大区别就是 reduce by key map 段有 combinergroup by key map 段没有 combiner

相关文章
|
关系型数据库 BI 分布式数据库
PolarDB NL2BI解决方案,让你不懂SQL也能进行数据查询分析并生成BI报表
无需创建和开通资源,在预置环境中免费体验PolarDB MySQL及其NL2BI解决方案
PolarDB NL2BI解决方案,让你不懂SQL也能进行数据查询分析并生成BI报表
|
SQL 大数据 关系型数据库
大数据面试:面试官要求我了解过Presto——Presto到底是个什么东西
大数据面试:面试官要求我了解过Presto——Presto到底是个什么东西
317 0
|
1月前
|
人工智能 前端开发 安全
Chef:开源 AI 全栈应用构建工具实践
Chef 是 Convex 推出的开源 AI 应用构建工具,能根据自然语言生成包含数据库、认证和实时功能的完整全栈应用。通过类型安全开发循环实现自动错误修复,解决传统 AI 工具只能生成前端代码的问题,适合快速原型开发。
|
数据可视化 vr&ar
【Eviews实战】——ARIMA模型建模
【Eviews实战】——ARIMA模型建模
|
Kubernetes Apache 流计算
flink-kubernetes-operator 的简单使用
flink-kubernetes-operator 的简单使用
913 0
|
数据采集 中间件 数据挖掘
Scrapy 爬虫框架(一)
Scrapy 爬虫框架(一)
365 0
|
监控 Java Spring
Spring Boot中使用Actuator进行监控
Spring Boot中使用Actuator进行监控
|
人工智能 JSON 数据格式
[AI CrewAI] 你来当老板,组建AI团队,协作AI Agent完成任务
[AI CrewAI] 你来当老板,组建AI团队,协作AI Agent完成任务
|
数据可视化
【Eviews实战】——多元线性回归模型的建立(二)
【Eviews实战】——多元线性回归模型的建立(二)
|
JavaScript 前端开发 API
游戏开发入门:Python后端与Vue前端的协同工作方式
【4月更文挑战第11天】使用Python后端(Flask或Django)和Vue.js前端开发游戏变得流行,能提高开发效率和可维护性。本文指导如何构建这样的项目,包括设置环境、创建虚拟环境、搭建后端API及前端Vue组件,强调前后端协作和API接口的重要性。这种架构促进团队合作,提升代码质量和游戏体验。
570 3