千家信息网

spark中RDD算子的示例分析

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍了spark中RDD算子的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Value型Transformatio
千家信息网最后更新 2026年11月04日spark中RDD算子的示例分析

这篇文章主要介绍了spark中RDD算子的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

Value型Transformation算子

处理数据类型为Value型的Transformation算子可以根据RDD变换算子的输入分区与输出分区关系分为以下几种类型。

1)输入分区与输出分区一对一型。

2)输入分区与输出分区多对一型。

3)输入分区与输出分区多对多型。

4)输出分区为输入分区子集型。

5)还有一种特殊的输入与输出分区一对一的算子类型:Cache型。Cache算子对RDD分区进行缓存。

这里的对应指的是分区依赖的对应

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

(1)map(func)

map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD,新RDD叫作MappedRDD(this, sc.clean(f))。任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。

图3-4中的每个方框表示一个RDD分区,左侧的分区经过用户自定义函数f:T->U映射为右侧的新的RDD分区。但是实际只有等到Action算子触发后,这个f函数才会和其他函数在一个Stage中对数据进行运算。V1输入f转换输出V'1。

(2)flatMap(func)

类似于map,但是每一个输入元素,会被映射为0到多个输出元素(因此,func函数的返回值是一个Seq,而不是单一元素)。内部创建 FlatMappedRDD(this, sc.clean(f))。

图3-5中小方框表示RDD的一个分区,对分区进行flatMap函数操作,flatMap中传入的函数为f:T->U,T和U可以是任意的数据类型。将分区中的数据通过用户自定义函数f转换为新的数据。外部大方框可以认为是一个RDD分区,小方框代表一个集合。V1、V2、V3在一个集合作为RDD的一个数据项,转换为V'1、V'2、V'3后,将结合拆散,形成为RDD中的数据项。

(3)mapPartitions(func)

mapPartitions是map的一个变种。map的输入函数是应用于RDD中每个元素,而mapPartitions的输入函数是应用于每个分区,也就是把每个分区中的内容作为整体来处理的。

mapPartitions函数获取到每个分区的迭代器,在函数中通过这个分区整体的迭代器对整个分区的元素进行操作。内部实现是生成MapPartitionsRDD。图3-6中的方框代表一个RDD分区。

图3-6中,用户通过函数f (iter )=>iter.filter(_>=3)对分区中的所有数据进行过滤,>=3的数据保留。一个方块代表一个RDD分区,含有1、2、3的分区过滤只剩下元素3。

(4)glom()

glom函数将每个分区形成一个数组,内部实现是返回的GlommedRDD。图3-7中的每个方框代表一个RDD分区。

图3-7中的方框代表一个分区。该图表示含有V1、V2、V3的分区通过函数glom形成一个数组Array[(V1),(V2),(V3)]。

2.输入分区与输出分区多对一型

(1)union(otherDataset)

使用union函数时需要保证两个RDD元素的数据类型相同,返回的RDD数据类型和被合并的RDD元素数据类型相同,并不进行去重操作,保存所有元素。如果想去重,可以使用distinct()。++符号相当于uion函数操作。

图3-8中左侧的大方框代表两个RDD,大方框内的小方框代表RDD的分区。右侧大方框代表合并后的RDD,大方框内的小方框代表分区。含有V1,V2…U4的RDD和含有V1,V8…U8的RDD合并所有元素形成一个RDD。V1、V1、V2、V8形成一个分区,其他元素同理进行合并。

(2)cartesian(otherDataset)

对两个RDD内的所有元素进行笛卡尔积操作。操作后,内部实现返回CartesianRDD。

左侧的大方框代表两个RDD,大方框内的小方框代表RDD的分区。右侧大方框代表合并后的RDD,大方框内的小方框代表分区。大方框代表RDD,大方框中的小方框代表RDD分区。 例如,V1和另一个RDD中的W1、 W2、 Q5进行笛卡尔积运算形成(V1,W1)、(V1,W2)、(V1,Q5)。

3.输入分区与输出分区多对多型

groupBy (func)

将元素通过函数生成相应的Key,数据就转化为Key-Value格式,之后将Key相同的元素分为一组。
图中,方框代表一个RDD分区,相同key的元素合并到一个组。 例如,V1,V2合并为一个Key-Value对,其中key为" V" ,Value为" V1,V2" ,形成V,Seq(V1,V2)。

4.输出分区为输入分区子集型

(1)filter(func)

filter的功能是对元素进行过滤,对每个元素应用f函数,返回值为true的元素在RDD中保留,返回为false的将过滤掉。内部实现相当于生成FilteredRDD(this,sc.clean(f))。
图3-11中的每个方框代表一个RDD分区。T可以是任意的类型。通过用户自定义的过滤函数f,对每个数据项进行操作,将满足条件,返回结果为true的数据项保留。例如,过滤掉V2、V3保留了V1,将区分命名为V1'。

(2)distinct([numTasks]))

distinct将RDD中的元素进行去重操作。图3-12中的方框代表RDD分区。

图3-12中的每个方框代表一个分区,通过distinct函数,将数据去重。例如,重复数据V1、V1去重后只保留一份V1。

(3)subtract(other, numPartitions=None)

subtract相当于进行集合的差操作,RDD 1去除RDD 1和RDD 2交集中的所有元素。

图3-13中左侧的大方框代表两个RDD,大方框内的小方框代表RDD的分区。右侧大方框代表合并后的RDD,大方框内的小方框代表分区。V1在两个RDD中均有,根据差集运算规则,新RDD不保留,V2在第一个RDD有,第二个RDD没有,则在新RDD元素中包含V2。

(4)sample(withReplacement, fraction, seed=None)

sample将RDD这个集合内的元素进行采样,获取所有元素的子集。用户可以设定是否有放回的抽样、百分比、随机种子,进而决定采样方式。

内部实现是生成SampledRDD(withReplacement, fraction, seed)。

函数参数设置如下。

withReplacement=true,表示有放回的抽样;

withReplacement=false,表示无放回的抽样。

图3-14中的每个方框是一个RDD分区。通过sample函数,采样50%的数据。V1、V2、U1、U2、U3、U4采样出数据V1和U1、U2,形成新的RDD。

(5)takeSample(withReplacement, num, seed=None)

takeSample()函数和上面的sample函数是一个原理,但是不使用相对比例采样,而是按设定的采样个数进行采样,同时返回结果不再是RDD,而是相当于对采样后的数据进行Collect(),返回结果的集合为单机的数组。

图3-15中左侧的方框代表分布式的各个节点上的分区,右侧方框代表单机上返回的结果数组。通过takeSample对数据采样,设置为采样一份数据,返回结果为V1。

5.Cache型

(1)cache

cache将RDD元素从磁盘缓存到内存,相当于persist(MEMORY_ONLY)函数的功能。图3-14中的方框代表RDD分区。

图3-16中的每个方框代表一个RDD分区,左侧相当于数据分区都存储在磁盘,通过cache算子将数据缓存在内存。

(2)persist(storageLevel=StorageLevel(False, True, False, False, 1))

persist函数对RDD进行缓存操作。数据缓存在哪里由StorageLevel枚举类型确定。有以下几种类型的组合(见图3-15),DISK代表磁盘,MEMORY代表内存,SER代表数据是否进行序列化存储。

下面为函数定义,StorageLevel是枚举类型,代表存储模式,用户可以通过图3-17按需选择。

图3-17中列出persist函数可以缓存的模式。例如,MEMORY_AND_DISK_SER代表数据可以存储在内存和磁盘,并且以序列化的方式存储。其他同理。图中,方框代表RDD分区。 disk代表存储在磁盘,mem代表存储在内存。 数据最初全部存储在磁盘,通过persist(MEMORY_AND_DISK)将数据缓存到内存,但是有的分区无法容纳在内存,例如:图3-18中将含有V1,V2,V3的RDD存储到磁盘,将含有U1,U2的RDD仍旧存储在内存。

感谢你能够认真阅读完这篇文章,希望小编分享的"spark中RDD算子的示例分析"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

代表 函数 数据 元素 方框 大方 输入 输出 类型 存储 算子 内存 磁盘 缓存 两个 用户 右侧 结果 相同 数据项 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 上海互联网科技有限公司 互联网金融 金融科技 美国互联网科技 有马互联网科技 互联网科技媒体 唐信互联网科技 大连 互联网科技类展会 科技伦理 互联网公司 西藏七维空间互联网科技有限公司 温州喔噻互联网科技有限公司 福州新华互联网科技学校 知乎 汽车互联网创新科技园 南山科技园互联网公司有哪些 杭州壁岐互联网科技有限公司 电子科技大学互联网创业大赛 无锡工业互联网科技有限公司 郑州欣桑互联网科技有限公司 全球科技与互联网公司市值变化 同城互联网络科技 手冲咖啡和咖啡机区别 云信互联网科技有限公司 亿策互联网科技 西安互联网科技公司 银川新华互联网科技学校地址 汽车互联网创新科技园 互联网科技公司实习生 伊宁互联网科技做什么的 悟空问答互联网科技 唐山双旺合互联网科技产业园
0