问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

RDD 算子分类

发布网友 发布时间:2022-11-09 20:20

我来回答

1个回答

热心网友 时间:2023-11-22 13:27

摘要: 本文主要介绍Spark算子的作用,以及算子的分类。

转换:Transformation , 行动: Action

RDD算子分类,大致可以分为两类,即:

1.  Transformation:转换算子,这类转换并不触发提交作业,完成作业中间过程处理。

2.  Action:行动算子,这类算子会触发SparkContext提交Job作业。

下面分别对两类算子进行详细介绍:

一:Transformation:转换算子

1.  map:

将原来RDD的每个数据项通过map中的用户自定义函数f映射转变为一个新的元素。源码中map算子相当于初始化一个RDD,新RDD叫做MappedRDD(this,sc.clean(f) )。即:

map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。

上述例子中把原RDD中每个元素都乘以3来产生一个新的RDD。

2.  mapPartitions:

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

上述例子是通过 函数filter 对分区中所有数据进行过滤。

3.  mapValues

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

mapValues顾名思义就是输入函数应用于RDD中Kev-Value的Value,原RDD中的Key保持不变,与新的Value一起组成新的RDD中的元素。因此,该函数只适用于元素为KV对的RDD。

4.  mapWith:

mapWith是map的另外一个变种,map只需要一个输入函数,而mapWith有两个输入函数。

eg: 把partition index 乘以10,然后加上2作为新的RDD的元素.(3 是将十个数分为三个区)

5.  flatMap:

将原来RDD中的每个元素通过函数f转换为新的元素,并将生成的RDD的每个集合中的元素合并为一个集合,内部创建FlatMappedRDD(this,sc.clean() )。即:

与map类似,区别是原RDD中的元素经map处理后只能生成一个元素,而原RDD中的元素经flatmap处理后可生成多个元素来构建新RDD。

eg:对原RDD中的每个元素x产生y个元素(从1到y,y为元素x的值)。

6.  flatMapWith:

flatMapWith与mapWith很类似,都是接收两个函数,一个函数把partitionIndex作为输入,输出是一个新类型A;另外一个函数是以二元组(T,A)作为输入,输出为一个序列,这些序列里面的元素组成了新的RDD。

7.  flatMapWithValues:

flatMapValues类似于mapValues,不同的在于flatMapValues应用于元素为KV对的RDD中Value。每个一元素的Value被输入函数映射为一系列的值,然后这些值再与原RDD中的Key组成一系列新的KV对。

上述例子中原RDD中每个元素的值被转换为一个序列(从其当前值到5),比如第一个KV对(1,2), 其值2被转换为2,3,4,5。然后其再与原KV对中Key组成一系列新的KV对(1,2),(1,3),(1,4),(1,5)。

8.  rece:

rece将RDD中元素两两传递给输入函数,同时产生一个新的值,新产生的值与RDD中下一个元素再被传递给输入函数直到最后只有一个值为止。

eg:对元素求和。

9.  receByKey

顾名思义,receByKey就是对元素为KV对的RDD中Key相同的元素的Value进行rece,因此,Key相同的多个元素的值被rece为一个值,然后与原RDD中的Key组成一个新的KV对。

eg:对Key相同的元素的值求和,因此Key为3的两个元素被转为了(3,10)。

10.  cartesian:

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

11.  Sample:

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

内部实现: SampledRDD(withReplacement,fraction,seed)。

函数参数设置:

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

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

根据fraction指定的比例,对数据进行采样,可以选择是否用随机数进行替换,seed用于指定随机数生成器种子。

12.  union:

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

eg: a 与 b 的联合

去重复:

13.  groupBy:

将元素通过函数生成相应的Key,数据就转化为Key-Value格式,之后将Key相同的元素分为一组。

eg:根据数据集中的每个元素的K值对数据分组

14.  join:

join对两个需要连接的RDD进行cogroup函数操作,将相同key的数据能偶放到一个分区,在cgroup操作之后形成新RDD对每个key下的元素进行笛卡尔积的操作,返回的结果在展平,对应key下的所有元组形成一个集合。最后返回 RDD[(K, (V, W))]。

eg:a与b两个数据连接,相当于表的关联

15.  cache:

cache将RDD元素从磁盘缓存到内存。相当于 persist(MEMORY_ONLY) 函数的

功能。

16.  persist:

persist函数对RDD进行缓存操作,数据缓存在哪里,由StorageLevel这个枚举类型进行确定。DISK 代表磁盘,MEMORY 代表内存, SER 代表数据是否进行序列化存储。

函数定义: persist(newLevel:StorageLevel)

StorageLevel 是枚举类型,代表存储模式。

MEMORY_AND_DISK_SER 代表数据可以存储在内存和磁盘,并且以序列化的方式存储,其他同理。

二:Action:行动算子

1.  foreach:

foreach对RDD中的每个元素都应用f函数操作,不返回 RDD 和 Array, 而是返回Uint。

2.  saveAsTextFile:

函数将数据输出,存储到 HDFS 的指定目录。

函数的内 部实现,其内部通过调用 saveAsHadoopFile 进行实现:

this.map(x => (NullWritable.get(), new Text(x.toString)))

.saveAsHadoopFile[TextOutputFormat[NullWritable, Text]](path)

将 RDD 中的每个元素映射转变为 (null, x.toString),然后再将其写入 HDFS。

3.  collect:

collect相当于toArray,不过已经过时不推荐使用,collect将分布式的RDD返回为一个单机的scala Array数据,在这个数组上运用 scala 的函数式操作。

4.  count:

count返回整个RDD的元素个数。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
有什么好玩且免费的游戏吗??? 有什么游戏比较好玩免费耐玩的吗? 寻找一个真正免费休闲的游戏?不要征途那样的 这几天因为喝酒吃烧烤弄得痔疮犯了,想去看,请问在包头较好治疗的医院... 最近因为工作的原因弄得痔疮犯了,想去看,请问在包头哪里治疗较好?_百度... 现在在包头,这几天因为喝酒弄得痔疮犯了,想去看,请问在哪家医院好?_百 ... 包头痔疮做手术要多少钱 包头痔疮手术需要多少费用 申玉菲那么有钱,为什么还住地下室? 中华英才网工作靠谱吗? SparkCore核心RDD详解及五大特性 开启警报防御摄像头会发生报警吗? Spark最基本的单位 RDD 在对客服务沟通中,应避免的不良身体语言有哪些? 作为一名酒店接待员,你如何使用适当的身体语言与客人交流? )服务员的哪些身体语言会影响客人的心情 - 信息提示 电脑截图后图片在哪个文件夹 盐城阜宁县囯美电器好太太燃气灶销售电话 怎么样才能让别人愿意陪我聊天? 我想问问怎么让男生主动找你聊天 请问各位网友,OPPO Pad值得买吗? oppofindx5pro可以开游戏直播吗? OPPO Pad的性能怎么样?游戏体验好不好? 想问问,OPPO Pad用来玩游戏怎么样? OPPO Pad值得买吗?可以用来打游戏吗? 名字可以注册商标吗 臂的组词和拼音 汉字臂组词 2021年元旦十一月二十九是黄道吉日吗?元旦这天能理发吗? 2022年元旦十二月初十的黄历如何,是签约的吉日吗? 前所未有的强大 OPPO Reno7前置摄像体验 opporeno8前置为什么会自动锐化 请问一下,我有台小型的空压机为什么气压低于加载气压才启动 移动电源为什么会重 10000毫安的充电宝比两个5000毫安的要重 vue中动态路由组件缓存及生命周期函数 配置一样的电脑硬盘换到另一台电脑为什么会掉驱动? 影视大全可以看火影忍者疾风传吗 想问微信被强制下线是什么情况 藤纯子的介绍 不同的操作系统间的区别。S3与S5有什么区别?赛班与安卓有什么区别? 中药浓煎是什么意思 中药里文火浓煎,每日一剂,煎两次服是什么意思 请问各位专家。浓煎30分钟。两煎取汁100ml是什么意思。怎么操作。谢谢 嫩剥青菱角,浓煎白茗芽。的意思 中医上这句“取好浓土煎黄连汁搜之”搜之什么意思? 葡萄酒 是柔红好喝,还是干红好喝? 补办的银行卡是几类卡? 农行一类卡破损从新补回原来的卡号还属一类卡吗? 补办银行卡属于一类帐户吗