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

相关文章
|
Web App开发 存储 移动开发
IRS应用发布之应用调试
Debug调试工具支持日志查询和前端页面调试:
IRS应用发布之应用调试
|
Python 容器
在Python中,键值对(key-value pair)结构
在Python中,键值对(key-value pair)结构
480 1
IDEA第一次上传项目到gitlab
IDEA第一次上传项目到gitlab步骤
1320 1
|
分布式计算 Java Shell
Spark Shell入门教程(上)
Spark Shell入门教程(上)
1159 0
Spark Shell入门教程(上)
|
数据采集 运维 数据挖掘
一文速学-Pandas异常值检测及处理操作各类方法详解+代码展示
一文速学-Pandas异常值检测及处理操作各类方法详解+代码展示
1620 0
一文速学-Pandas异常值检测及处理操作各类方法详解+代码展示
|
机器学习/深度学习 vr&ar
【深度强化学习】值函数逼近的详解(图文解释)
【深度强化学习】值函数逼近的详解(图文解释)
247 0
|
JavaScript 前端开发 数据可视化
Py之mpld3:mpld3的简介、安装、使用方法之详细攻略
Py之mpld3:mpld3的简介、安装、使用方法之详细攻略
Py之mpld3:mpld3的简介、安装、使用方法之详细攻略
|
存储 人工智能 算法
路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)-1
路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)-1
|
设计模式 JSON JavaScript
Javascript实现购物车的详细代码
Javascript实现购物车的详细代码
399 3
|
12月前
|
机器学习/深度学习 自然语言处理 搜索推荐
一文掌握jieba分词器的常见用法,附带案例
该文章全面介绍了jieba分词器的使用方法,包括安装步骤、不同分词模式的使用,以及如何通过实例代码进行文本分词处理。
1210 0