RDD 算子_转换_ foldByKey | 学习笔记

简介: 快速学习 RDD 算子_转换_ foldByKey

开发者学堂课程【大数据Spark2020最新课程(知识精讲与实战演练)第二阶段RDD 算子_转换_  foldByKey学习笔记,与课程紧密联系,让用户快速学习知识。

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


RDD 算子_转换_  foldByKey


内容介绍

一、前言

二、区别

三、案例

四、总结


一、前言

前面我们了解了一个算子叫做 reduceByKey ,那么接下来,我们将了解一个跟它几乎一模一样的算子叫做 foldByKey


二、区别

foldByKey 和 reduceByKey 最大的区别就在于 foldByKey 有一个初始值,而  reduceByKey 初始值就为零。

那什么是初始值?

如图所示,对于 RDD 来说,如果对它进行 reduceByKey ,那么结果肯定是(“a”,2)。如果指定了初始值为10,可能得到的结果为22。第一项的初始值可以指定为10101相加是11。第二项我也指定一个初始值,相加后也是11。那么这两个的初始值再加上具体的值,最终结果是22。这就是 foldByKey reduceByKey 最大的区别。

1.png


三、案例

接下来我们用一个小小的案例加深下理解。这个案例也是将(“a”,1

聚和,即 key zerovalue 聚合,只是这次指定了一个初始值。

第一步,先将集合拷贝进入到代码当中,创建一个新的方法。这个 fold 的意思是折叠,那么我们快速的把这个代码写完,就是foldByKey ,它的调用方式希望大家还记得,它里面有两个函数可调用。第一个函数里面传入初始值,第二个函数传入聚合规则。

这也是两个参数,第一个参数是 curr ,第二个参数是局部结果 (agg) ,然后是两者相加。接下来,我们就可以直接 collect ,然后foreachprint)  

Test

def foldByKey()Unit =

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

.foldByKey(zerovalue=10)((curr,agg) => curr + agg)

.collect()

.foreach(println(_))

此时,代码已经完成,运行一下,看一看 foldByKey 的结果。首先,是有两个 key ,那么第一个 key 的结果应该是多少?

初始值是10,那么结果是12,还是22,答案是 a22b11。也就是说,这个初始值会作用于每一个元素,而不是在整体上作用一次,这个和 Scala 当中的 fold 操作还是有一点点区别,需要大家注意一下。

1.png

 

四、总结

简单总结一下,首先是 foldByKey Spark 中的 reduceByKey 区别是可以指定初始值, foldByKey Scala 中的 foldLeft 或者 foldRight 区别是初始值作用于每一个数据,而 Scala 当中只作用一次,就是整体上指定一个初始值,但是 foldByKey 是为每一条数据设定一个初始值。

相关文章
|
存储 缓存 分布式计算
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
159 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
|
分布式计算
|
分布式计算 大数据 Spark
Rdd 算子_转换_回顾 | 学习笔记
快速学习 Rdd 算子_转换_回顾
Rdd 算子_转换_回顾 | 学习笔记
|
分布式计算 算法 大数据
RDD 算子_转换_ combineByKey | 学习笔记
快速学习 RDD 算子_转换_ combineByKey
134 0
RDD 算子_转换_ combineByKey | 学习笔记
|
分布式计算 大数据 开发者
RDD 算子_转换_ aggregateByKey | 学习笔记
快速学习 RDD 算子_转换_ aggregateByKey
117 0
RDD 算子_转换_ aggregateByKey | 学习笔记
|
分布式计算 算法 大数据
Rdd 算子_转换_mapvalues | 学习笔记
快速学习 Rdd 算子_转换_mapvalues
137 0
Rdd 算子_转换_mapvalues | 学习笔记
|
分布式计算 大数据 Spark
RDD 算子_转换_排序 | 学习笔记
快速学习 RDD 算子_转换_排序
100 0
RDD 算子_转换_排序 | 学习笔记
|
分布式计算 大数据 开发者
Rdd 算子_转换_groupbykey | 学习笔记
快速学习 Rdd 算子_转换_groupbykey
157 0
Rdd 算子_转换_groupbykey | 学习笔记
|
分布式计算 大数据 Spark
Rdd 算子_转换_集合操作 | 学习笔记
快速学习 Rdd 算子_转换_集合操作
Rdd 算子_转换_集合操作 | 学习笔记
|
分布式计算 大数据 开发者
RDD 算子_转换 join | 学习笔记
快速学习 RDD 算子_转换 join
107 0
RDD 算子_转换 join | 学习笔记