Spark-Core编程

RDD转换算子

RDD 根据数据处理方式的不同将算子整体上分为 Value 类型、双 Value 类型和 Key-Value 类型。

Value类型:

map算子:用于映射转换,可以进行类型转换和值转换。

mapPartitions算子:在分区基础上进行映射,可以并行处理数据,提高处理速度,但可能占用更多内存。

mapPartitionsWithIndex算子:将待处理的数据以分区为单位发送到计算节点进行处理,这里的处理是指可以进行任意的处理,哪怕是过滤数据,在处理时同时可以获取当前分区索引。

flatMap算子:先扁平化数据再映射,适用于嵌套数据的处理。

glom算子:将同一个分区的数据直接转换为相同类型的内存数组进行处理,分区不变。

groupBy算子:根据指定规则进行分组,可能导致数据在不同分区之间重新分布。

flter算子:根据指定规则筛选数据,分区不变但数据分布可能不均衡。

sample算子:根据指定概率抽取数据,可以设置放回和不放回。

distinct算子:去重操作,可以选择是否分区。

coalesce算子:缩减分区数量,提高小数据集的执行效率。

repartition算子:调整分区数量,可以增加或减少分区。

sortBy算子:对数据进行排序,可以选择升序或降序,并指定分区数量。

区别:

map 和 mapPartitions 的区别:

数据处理角度:

Map 算子是分区内一个数据一个数据的执行,类似于串行操作。而 mapPartitions 算子是以分区为单位进行批处理操作。

功能的角度:

Map 算子主要目的将数据源中的数据进行转换和改变。但是不会减少或增多数据。MapPartitions 算子需要传递一个迭代器,返回一个迭代器,没有要求的元素的个数保持不变,所以可以增加或减少数据

性能的角度:

Map 算子因为类似于串行操作,所以性能比较低,而是 mapPartitions 算子类似于批处理,所以性能较高。但是 mapPartitions 算子会长时间占用内存,那么这样会导致内存可能不够用,出现内存溢出的错误。所以在内存有限的情况下,不推荐使用。使用 map 操作。

map和flatMap的区别:

map会将每一条输入数据映射为一个新对象。

flatMap包含两个操作:会将每一个输入对象输入映射为一个新集合,然后把这些新集合连成一个大集合。

双Value类型:

intersection算子:对源 RDD 和参数 RDD 求交集后返回一个新的 RDD。

union算子:对源 RDD 和参数 RDD 求并集后返回一个新的 RDD(重复数据不会去重)。

subtract算子:求两个RDD的差集,以第一个RDD为主,去掉重复元素(求差集)。

zip算子:将两个RDD的数据按位置配对,组成键值对形式,其中,键值对中的 Key 为第 1 个 RDD中的元素,Value 为第 2 个 RDD 中的相同位置的元素。

Key-Value类型:

partitionBy:将数据按照指定 Partitioner 重新进行分区。Spark 默认的分区器是 HashPartitioner。

groupByKey:将数据源的数据根据 key 对 value 进行分组。

reduceByKey:可以将数据按照相同的 Key 对 Value 进行聚合。

aggregateByKey:将数据根据不同的规则进行分区内计算和分区间计算。

foldByKey:当分区内计算规则和分区间计算规则相同时,aggregateByKey 就可以简化为 foldByKey。

combineByKey:最通用的对 key-value 型 rdd 进行聚集操作的聚集函数(aggregation function)。类似于aggregate(),combineByKey()允许用户返回值的类型与输入不一致。

区别:

reduceByKey 和 groupByKey 的区别:

从 shuffle 的角度:

reduceByKey 和 groupByKey 都存在 shuffle 的操作,但是 reduceByKey可以在 shuffle 前对分区内相同 key 的数据进行预聚合(combine)功能,这样会减少落盘的数据量,而 groupByKey 只是进行分组,不存在数据量减少的问题,reduceByKey 性能比较高。

从功能的角度:

reduceByKey 其实包含分组和聚合的功能。GroupByKey 只能分组,不能聚合,所以在分组聚合的场合下,推荐使用 reduceByKey,如果仅仅是分组而不需要聚合。那么还是只能使用 groupByKey。

reduceByKey、foldByKey、aggregateByKey、combineByKey 的区别:

reduceByKey:

相同 key 的第一个数据不进行任何计算,分区内和分区间计算规则相同

FoldByKey:

每一个key 对应的数据和初始值进行分区内计算,分区内和分区间计算规则相同。

AggregateByKey:

每一个 key 对应的数据和初始值进行分区内计算,分区内和分区间计算规则可以不相同。

CombineByKey:

当计算时,发现数据结构不满足要求时,可以让第一个数据转换结构。分区内和分区间计算规则不相同。

相关推荐
面向Google编程2 小时前
Flink源码阅读:JobManager的HA机制
大数据·flink
Tony Bai2 小时前
【分布式系统】03 复制(上):“权威中心”的秩序 —— 主从架构、一致性与权衡
大数据·数据库·分布式·架构
汽车仪器仪表相关领域4 小时前
全自动化精准检测,赋能高效年检——NHD-6108全自动远、近光检测仪项目实战分享
大数据·人工智能·功能测试·算法·安全·自动化·压力测试
大厂技术总监下海4 小时前
根治LLM胡说八道!用 Elasticsearch 构建 RAG,给你一个“有据可查”的AI
大数据·elasticsearch·开源
石像鬼₧魂石6 小时前
22端口(OpenSSH 4.7p1)渗透测试完整复习流程(含实战排错)
大数据·网络·学习·安全·ubuntu
TDengine (老段)6 小时前
TDengine Python 连接器进阶指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
数据猿8 小时前
【金猿CIO展】如康集团CIO 赵鋆洲:数智重塑“顶牛”——如康集团如何用大数据烹饪万亿肉食产业的未来
大数据
txinyu的博客9 小时前
HTTP服务实现用户级窗口限流
开发语言·c++·分布式·网络协议·http
独自破碎E10 小时前
RabbitMQ中的Prefetch参数
分布式·rabbitmq
zxsz_com_cn10 小时前
设备预测性维护的意义 工业设备预测性维护是什么
大数据