千家信息网

spark RDD算子中Key-Value型Transformation算子的示例分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要为大家展示了"spark RDD算子中Key-Value型Transformation算子的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一
千家信息网最后更新 2026年11月03日spark RDD算子中Key-Value型Transformation算子的示例分析

这篇文章主要为大家展示了"spark RDD算子中Key-Value型Transformation算子的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"spark RDD算子中Key-Value型Transformation算子的示例分析"这篇文章吧。

Key-Value型Transformation算子

Transformation处理的数据为Key-Value形式的算子,大致可以分为3种类型:输入分区与输出分区一对一、聚集、连接操作。

1.输入分区与输出分区一对一

mapValues(f)

针对(Key, Value)型数据中的 Value进行Map操作,而不对Key进行处理。

图3-19中的方框代表RDD分区。a=>a+2代表只对(V1,1)数据中的1进行加2操作,返回结果为3。

2.对单个RDD或两个RDD聚集

(1)单个RDD聚集

1)combineByKey(createCombiner, mergeValue, mergeCombiners, numPartitions=None, partitionFunc=)

说明:

createCombiner: V => C,在C不存在的情况下,如通过V创建seq C。

mergeValue: (C, V) => C,当C已经存在的情况下,需要merge,如把item V加到seq C中,或者叠加。

mergeCombiners: (C, C) => C,合并两个C。

partitioner: Partitioner(分区器), Shuffle时需要通过Partitioner的分区策略进行分区。

mapSideCombine: Boolean = true,为了减小传输量,很多combine可以在map端先做。例如,叠加可以先在一个partition中把所有相同的Key的Value叠加,再shuffle。

serializerClass: String = null,传输需要序列化,用户可以自定义序列化类。

例如,相当于将元素为(Int,Int)的RDD转变为了(Int, Seq[Int])类型元素的RDD。

图3-20中的方框代表RDD分区。通过combineByKey,将(V1, 2)、(V1, 1)数据合并为(V1, Seq(2, 1))。

2)reduceByKey(func, numPartitions=None, partitionFunc=)

reduceByKey是更简单的一种情况,只是两个值合并成一个值,所以createCombiner很简单,就是直接返回v,而mergeValue和mergeCombiners的逻辑相同,没有区别。
图3-21中的方框代表RDD分区。通过用户自定义函数(A, B)=>(A + B),将相同Key的数据(V1, 2)、(V1, 1)的value相加,结果为(V1, 3)。

3)partitionBy(numPartitions, partitionFunc=)

partitionBy函数对RDD进行分区操作。

如果原有RDD的分区器和现有分区器(partitioner)一致,则不重分区,如果不一致,则相当于根据分区器生成一个新的ShuffledRDD。

图3-22中的方框代表RDD分区。通过新的分区策略将原来在不同分区的V1、V2数据都合并到了一个分区。

(2)对两个RDD进行聚集

cogroup(other, numPartitions=None)

cogroup函数将两个RDD进行协同划分,对在两个RDD中的Key-Value类型的元素,每个RDD相同Key的元素分别聚合为一个集合,并且返回两个RDD中对应Key的元素集合的迭代器。其中,Key和Value,Value是两个RDD下相同Key的两个数据集合的迭代器所构成的元组。

图3-23中的大方框代表RDD,大方框内的小方框代表RDD中的分区。将RDD1中的数据(U1, 1)、(U1, 2)和RDD2中的数据(U1, 2)合并为(U1, ((1, 2), (2)))。

3.连接

(1)join

join对两个需要连接的RDD进行cogroup函数操作,cogroup原理请见上文。cogroup操作之后形成的新RDD,对每个key下的元素进行笛卡尔积操作,返回的结果再展平,对应Key下的所有元组形成一个集合,最后返回RDD[(K, (V, W))]

图3-24是对两个RDD的join操作示意图。大方框代表RDD,小方框代表RDD中的分区。函数对拥有相同Key的元素(例如V1)为Key,以做连接后的数据结果为(V1,(1,1))和(V1,(1,2))。

(2)leftOutJoin和rightOutJoin

LeftOutJoin(左外连接)和RightOutJoin(右外连接)相当于在join的基础上先判断一侧的RDD元素是否为空,如果为空,则填充为空。如果不为空,则将数据进行连接运算,并返回结果。

以上是"spark RDD算子中Key-Value型Transformation算子的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

两个 数据 代表 算子 元素 相同 方框 函数 结果 示例 分析 大方 内容 情况 篇文章 类型 叠加 一致 一对一 单个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 互联网科技园 互联网和科技技术 国智互联网科技 疫情对互联网科技公司影响 没上市的科技互联网公司 科技服务与互联网 广州宏创互联网科技 郑州华宇互联网科技 武汉健翔互联网络科技有限公司 苏州五指互联网络科技有限 互联网科技产业特征 想开互联网科技公司怎么样 中科明德北京互联网科技 城市宝互联网科技有限公司 厦门江牛科技互联网 上海乐五互联网科技有限公司 艺电能源互联网科技有限公司招聘 互联网科技手抄报图片 株洲百竞科技的互联网营销顾问 广东万易互联网科技有限公司惠州分公司 致聘互联网科技 上海喔噻互联网科技 美国互联网前沿科技 博兴的互联网电子科技公司 哈尔滨新华互联网科技学院 承德科技产业互联网发展 洛阳昕诺飞互联网科技有限公司 烟台灵鸽互联网科技有限公司 美国互联网科技公司
0