Spark中action和transformation算子

RDD是不可变型的,并且针对RDD的每个操作都将创建一个新的RDD。可以在RDD上执行两种类型的操作,即:action和transformation

1、transformation

transformation通过对现有RDD中的每个元素应用转换逻辑来生成新的RDD。一些转换函数可以对元素进行拆分、过滤或执行排序计算操作。
多个transformation算子可按顺序操作;但在transformation阶段,并不会真正执行任务。
对于transformation算子,Spark会将其加入包含了计算的DAG中。并且只有在driver需要数据时,该DAG才会真正执行。这种陈伟懒惰计算

transformation算子可以被分为以下四种类型:

1.1、 通用transformation算子

一些转换函数,可用于处理大部分通用性用户场景。常见的如聚集、过滤等。

  • map
  • filter
  • flatMap
  • groupByKey
  • sortByKey
  • combineByKey
1.2、数学统计transformation算子

即进行一些统计功能的算子。

  • sampleByKey
  • randomSpilt
1.3、集合/关系型transformation算子

用于完成对数据集进行连接的功能,或执行其他关系型代数函数。

  • cogroup
  • join
  • subtractByKey
  • fullOuterJoin
  • leftOuterJoin
  • rightOutJoin
1.4 、基于结构化数据的transformation算子

用于操作RDD底层数据或RDD分区,通过这些函数,可以直接操作分区而不用接触RDD内部的数据或元素。通常来说,可根据集群的状态和数据大小以及具体的用户场景,来重新考虑分区从而实现性能提升。

  • partitionBy
  • repartition
  • zipwithIndex
  • coalese

2、 action算子

action算子会触发DAG(有向无环图)中到现在为止创建的所有transformation算子。他会将这些transformation算子物化,然后执行对应的代码块和函数。此时由DAG指定的操作都将会被触发。

2.1 driver

dirver是action的其中一种算子,可以实现例如集合计数,按key计数等。此类action算子会在远程executor上执行某些操作,并将结果拉回到driver。
在大数据集上执行基于driver的action算子时,可能导致driver所在机器上的内存超载,从而导致应用运行失败,因此使用包含action算子的driver程序需要注意。

2.2 分布式action

分布式action在集群的所有节点执行。其例子为saveAsTextFile()。大部分的action算子都属于此类型。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值