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

相关文章
|
3天前
|
分布式计算 Spark
[Spark精进]必须掌握的4个RDD算子之flatMap算子
[Spark精进]必须掌握的4个RDD算子之flatMap算子
45 0
|
10月前
|
分布式计算 数据处理 Spark
RDD 中 groupByKey 和 reduceByKey 哪个性能好,为什么?
RDD 中 groupByKey 和 reduceByKey 哪个性能好,为什么?
78 0
|
10月前
|
分布式计算
|
分布式计算 大数据 Spark
RDD 算子_转换_总结 | 学习笔记
快速学习 RDD 算子_转换_总结
60 0
|
分布式计算 大数据 开发者
RDD 算子_转换_ aggregateByKey | 学习笔记
快速学习 RDD 算子_转换_ aggregateByKey
88 0
RDD 算子_转换_ aggregateByKey | 学习笔记
|
分布式计算 大数据 Scala
RDD 算子_转换_ foldByKey | 学习笔记
快速学习 RDD 算子_转换_ foldByKey
127 0
RDD 算子_转换_  foldByKey | 学习笔记
|
分布式计算 算法 大数据
Rdd 算子_转换_mapvalues | 学习笔记
快速学习 Rdd 算子_转换_mapvalues
101 0
Rdd 算子_转换_mapvalues | 学习笔记
|
分布式计算 大数据 Spark
Rdd 算子_转换_回顾 | 学习笔记
快速学习 Rdd 算子_转换_回顾
50 0
Rdd 算子_转换_回顾 | 学习笔记
|
分布式计算 算法 大数据
RDD 算子_转换_ combineByKey | 学习笔记
快速学习 RDD 算子_转换_ combineByKey
106 0
RDD 算子_转换_ combineByKey | 学习笔记
|
分布式计算 大数据 开发者
RDD 算子_转换 join | 学习笔记
快速学习 RDD 算子_转换 join
79 0
RDD 算子_转换 join | 学习笔记