SparkCore超详细的RDD算子操作

前言: 在开发并行程序时,可以利用类似 Fork/Join 的框架将一个大的任务切分成细小的任务每个小任务模块之间是相互独立的,可以并行执行,然后将所有小任务的结果汇总起来,得到最终的结果。
在这里插入图片描述
hadoop的Map和Reduce操作操作就是利用了这一思想,通过 map 操作让不同的集群节点并行计算,之后通过 reduce 操作将结果整合起来得到最终输出

Spark算子简介: 对于 Spark 处理的大量数据,先将数据切分放入RDD这一数据结构,我们开发就利用一些算子操作丶转换RDD操作调度集群资源进行计算.

1.RDD的分类

  • RDD分为两大类(Transformation转换算子和Action动作算子(触发DAG的执行))
    在这里插入图片描述
    官方文档:http://spark.apache.org/docs/latest/rdd-programming-guide.html#rdd-operations

2. Transformation转换算子操作详解

  • RDD中的所有转换都是延迟加载的,也就是说,它们并不会直接计算结果(避免了多次与磁盘的逻辑交互,提高了效率).
  • Transformation算子分为3类: 值类型丶双值类型丶Key-Value类型
2.1 值类型valueType
  • map(func) : 通过函数操作返回一个新的RDD
    在这里插入图片描述

  • filter(func): 筛选出
    在这里插入图片描述

  • flatMap(func): 类似于Map,一对一映射彼 扁平化
    在这里插入图片描述
    在这里插入图片描述

  • mapPartitions(func):

  • mapPartitionsWithIndex(func)

  • sample(withReplacement, fraction, seed):
    在这里插入图片描述
    在这里插入图片描述

  • Glom
    在这里插入图片描述
    在这里插入图片描述

  • sortBy(func,[ascending], [numTasks])
    在这里插入图片描述在这里插入图片描述

  • coalesce(numPartitions)
    在这里插入图片描述
    在这里插入图片描述

  • repartition(numPartitions)
    在这里插入图片描述

2.2 双值类型DoubleValueType
  • union(otherDataset): 将两个集合合并

  • intersection(otherDataset): 两个集合的交集

  • distinct([numTasks])): 去重
    在这里插入图片描述
    在这里插入图片描述

  • Subtract
    在这里插入图片描述

  • zip(otherDataset): 拉链操作代码,分区数要相同,不然报错.
    在这里插入图片描述
    在这里插入图片描述

2.3 Key-Value值类型
  • partitionBy

  • reduceByKey(func, [numTasks])
    在这里插入图片描述
    在这里插入图片描述

  • groupByKey: groupByKey也是对每个key进行操作,但只生成一个sequence。
    在这里插入图片描述
    在这里插入图片描述

  • reduceByKey和groupByKey的区别(面试问)

  1. reduceByKey:按照key进行聚合,在shuffle之前有combine(预聚合)操作,返回结果是RDD[k,v].
  2. groupByKey:按照key进行分组,直接进行shuffle。
  3. 开发指导:reduceByKey比groupByKey,建议使用。但是需要注意是否会影响业务逻辑。
  • combineByKey[C]: combineByKey是Spark中一个比较核心的高级且底层函数,其他一些高阶键值对函数底层都是用它实现的。诸如 groupByKey,reduceByKey等等

  • aggregateByKey(zeroValue:U,[partitioner: Partitioner]) (seqOp: (U, V) => U,combOp: (U, U) => U)

  • foldByKey(zeroValue: V)(func: (V, V) => V): RDD[(K, V)] : aggregateByKey的简化操作,seqop和combop相同
    在这里插入图片描述

  • sortByKey([ascending], [numTasks]): 在一个(K,V)的RDD上调用,K必须实现Ordered接口,返回一个按照key进行排序的(K,V)的RDD
    在这里插入图片描述

  • join(otherDataset, [numTasks])
    在这里插入图片描述
    在这里插入图片描述

  • cogroup(otherDataset, [numTasks]): 在类型为(K,V)和(K,W)的RDD上调用,返回一个(K,(Iterable,Iterable))类型的RDD
    在这里插入图片描述

  • cartesian(otherDataset): 笛卡尔积
    在这里插入图片描述
    在这里插入图片描述

  • mapValues:针对于(K,V)形式的类型只对V进行操作
    在这里插入图片描述
    在这里插入图片描述

3. Action算子(触发DAG的执行)

  • reduce(func): 通过func函数聚集RDD中的所有元素,这个功能必须是可交换且可并联的
    在这里插入图片描述

  • collect():
    在这里插入图片描述
    在这里插入图片描述

  • count(): 返回RDD的元素个数
    在这里插入图片描述

  • first(): 返回RDD的第一个元素(类似于take(1))
    在这里插入图片描述

  • take(n) : 返回一个由数据集的前n个元素组成的数组
    在这里插入图片描述

  • takeSample(withReplacement,num, [seed]) : 返回一个数组,该数组由从数据集中随机采样的num个元素组成,可以选择是否用随机数替换不足的部分,seed用于指定随机数生成器种子

在这里插入图片描述

  • takeOrdered(n): 返回前几个的排序
    在这里插入图片描述

  • aggregate (zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)

  • fold(num)(func) : 折叠操作,aggregate的简化操作,seqop和combop一样。

  • saveAsTextFile(path) :将数据集的元素以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本

  • saveAsSequenceFile(path) : 将数据集中的元素以Hadoop sequencefile的格式保存到指定的目录下,可以使HDFS或者其他Hadoop支持的文件系统。

  • saveAsObjectFile(path) : 用于将RDD中的元素序列化成对象,存储到文件中。

  • countByKey(): 针对(K,V)类型的RDD,返回一个(K,Int)的map,
    表示每一个key对应的元素个数。
    在这里插入图片描述

  • foreach(func):在数据集的每一个元素上,运行函数func进行更新。

3.1 数值RDD统计操作

简介: Spark 的数值操作是通过流式算法实现的,允许以每次一个元素的方式构建出模型。这些统计数据都会在调用 stats() 时通过一次遍历数据计算出来,并以 StatsCounter 对象返回。
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_49834705/article/details/113030271
今日推荐