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 是为每一条数据设定一个初始值。

相关文章
|
12月前
|
分布式计算
|
存储 缓存 分布式计算
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
122 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
|
分布式计算 算法 大数据
Rdd 算子_转换_mapvalues | 学习笔记
快速学习 Rdd 算子_转换_mapvalues
107 0
Rdd 算子_转换_mapvalues | 学习笔记
|
分布式计算 大数据 Spark
Rdd 算子_转换_回顾 | 学习笔记
快速学习 Rdd 算子_转换_回顾
56 0
Rdd 算子_转换_回顾 | 学习笔记
|
分布式计算 算法 大数据
RDD 算子_转换_ combineByKey | 学习笔记
快速学习 RDD 算子_转换_ combineByKey
111 0
RDD 算子_转换_ combineByKey | 学习笔记
|
分布式计算 大数据 开发者
RDD 算子_转换_ aggregateByKey | 学习笔记
快速学习 RDD 算子_转换_ aggregateByKey
93 0
RDD 算子_转换_ aggregateByKey | 学习笔记
|
分布式计算 大数据 开发者
Rdd 算子_转换_groupbykey | 学习笔记
快速学习 Rdd 算子_转换_groupbykey
121 0
Rdd 算子_转换_groupbykey | 学习笔记
|
分布式计算 大数据 Spark
RDD 算子_转换_排序 | 学习笔记
快速学习 RDD 算子_转换_排序
76 0
RDD 算子_转换_排序 | 学习笔记
|
分布式计算 大数据 Spark
Rdd 算子_转换_集合操作 | 学习笔记
快速学习 Rdd 算子_转换_集合操作
75 0
Rdd 算子_转换_集合操作 | 学习笔记
|
分布式计算 大数据 开发者
RDD 算子_转换 join | 学习笔记
快速学习 RDD 算子_转换 join
88 0
RDD 算子_转换 join | 学习笔记

热门文章

最新文章

  • 1
    流量控制系统,用正则表达式提取汉字
    25
  • 2
    Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
    26
  • 3
    Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
    25
  • 4
    Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
    27
  • 5
    S外部函数可以访问函数内部的变量的闭包-闭包最简单的用不了,闭包是内层函数+外层函数的变量,简称为函数套函数,外部函数可以访问函数内部的变量,存在函数套函数
    23
  • 6
    Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
    30
  • 7
    Redis05数据结构介绍,数据结构介绍,官方网站中看到
    21
  • 8
    JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
    19
  • 9
    JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
    19
  • 10
    定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
    19