sparkcore编程算子

今天是Spark Core编程算子

Value类型算子

  1. map

将处理的数据逐条进行映射转换,这里的转换可以是类型的转换,也可以是值的转换。Map算子是分区内一个数据一个数据的执行,类似于串行操作。

特点:

  • 主要目的将数据源中的数据进行转换和改变

  • 不会减少或增多数据

  • 性能较低,类似于串行操作

  1. mapPartitions

将待处理的数据以分区为单位发送到计算节点进行处理,这里的处理是指可以进行任意的处理,哪怕是过滤数据。

与map的区别:

  • 数据处理角度:mapPartitions算子是以分区为单位进行批处理操作

  • 功能角度:可以增加或减少数据

  • 性能角度:性能较高,但会长时间占用内存

  1. mapPartitionsWithIndex

将待处理的数据以分区为单位发送到计算节点进行处理,在处理时同时可以获取当前分区索引。

  1. flatMap

将处理的数据进行扁平化后再进行映射处理,所以算子也称之为扁平映射。

与map的区别:

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

  • flatMap会将每一个输入对象输入映射为一个新集合,然后把这些新集合连成一个大集合

  1. glom

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

  1. groupBy

将数据根据指定的规则进行分组,分区默认不变,但是数据会被打乱重新组合,我们将这样的操作称之为shuffle。极限情况下,数据可能被分在同一个分区中。一个组的数据在一个分区中,但是并不是说一个分区中只有一个组。

  1. filter

将数据根据指定的规则进行筛选过滤,符合规则的数据保留,不符合规则的数据丢弃。当数据进行筛选过滤后,分区不变,但是分区内的数据可能不均衡,生产环境下,可能会出现数据倾斜。

  1. sample

根据指定的规则从数据集中抽取数据,支持两种算法:

  • 伯努利算法(不放回):又叫0、1分布,根据种子和随机算法算出一个数和第二个参数设置几率比较

  • 泊松算法(放回):每一个元素被期望抽取到的次数

双Value类型算子

  1. intersection

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

  1. union

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

  1. subtract

以源RDD元素为主,去除两个RDD中重复元素,将源RDD的其他元素保留下来(求差集)。

  1. zip

将两个RDD中的元素,以键值对的形式进行合并。其中,键值对中的Key为第1个RDD中的元素,Value为第2个RDD中的相同位置的元素。

Key-Value类型算子

  1. partitionBy

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

  1. groupByKey

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

与reduceByKey的区别:

  • shuffle角度:reduceByKey可以在shuffle前对分区内相同key的数据进行预聚合,减少落盘数据量

  • 功能角度:reduceByKey包含分组和聚合功能,groupByKey只能分组

  1. reduceByKey

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

  1. aggregateByKey

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

  1. foldByKey

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

  1. combineByKey

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

  1. sortByKey

在一个(K,V)的RDD上调用,K必须实现Ordered接口(特质),返回一个按照key进行排序的RDD。

  1. join

在类型为(K,V)和(K,W)的RDD上调用,返回一个相同key对应的所有元素连接在一起的(K,(V,W))的RDD。

  1. leftOuterJoin

类似于SQL语句的左外连接。

  1. cogroup

在类型为(K,V)和(K,W)的RDD上调用,返回一个(K,(Iterable<V>,Iterable<W>))类型的RDD。

相关推荐
Dave.B4 小时前
用【vtk3DLinearGridCrinkleExtractor】快速提取3D网格相交面
算法·3d·vtk
yaoh.wang4 小时前
力扣(LeetCode) 1: 两数之和 - 解法思路
python·程序人生·算法·leetcode·面试·跳槽·哈希算法
Code Slacker4 小时前
LeetCode Hot100 —— 滑动窗口(面试纯背版)(四)
数据结构·c++·算法·leetcode
brave and determined4 小时前
CANN训练营 学习(day8)昇腾大模型推理调优实战指南
人工智能·算法·机器学习·ai实战·昇腾ai·ai推理·实战记录
脸大是真的好~5 小时前
分布式锁-基于redis实现分布式锁(不推荐)- 改进利用LUA脚本(不推荐)前面都是原理 - Redisson分布式锁
redis·分布式·lua
总爱写点小BUG5 小时前
打印不同的三角形(C语言)
java·c语言·算法
yaoh.wang5 小时前
力扣(LeetCode) 27: 移除元素 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·双指针
2401_841495645 小时前
【自然语言处理】中文 n-gram 词模型
人工智能·python·算法·自然语言处理·n-gram·中文文本生成模型·kneser-ney平滑
liuniansilence5 小时前
🚀 高并发场景下的救星:BullMQ如何实现智能流量削峰填谷
前端·分布式·消息队列
San306 小时前
从零到一:彻底搞定面试高频算法——“列表转树”与“爬楼梯”全解析
javascript·算法·面试