Bootstrap

大数据学习(35)- spark- action算子

&&大数据学习&&

🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


Spark中的Action算子是一类非常重要的算子,用于触发Spark作业的运行,并将数据输出到Spark系统外部或进行聚合计算。

一、Action算子的基本概念

在Spark中,算子(Operators)分为两类:Transformation算子和Action算子。Transformation算子用于生成新的RDD(弹性分布式数据集),而Action算子则用于触发SparkContext提交Job作业,并将数据输出Spark系统。Action算子会遍历RDD中的数据,并返回一个结果值(如一个数字、数组或集合),或者将数据写入外部存储系统。

二、常见的Action算子

  1. reduce(func):通过函数func聚集RDD中的元素。该函数先聚集各分区的数据集,再聚集分区之间的数据。func接收两个参数,返回一个新值,新值再作为参数继续传递给函数func,直到得到最后一个元素。例如,可以使用reduce算子来计算RDD中所有元素的和。
  2. collect():将RDD中的所有元素以数组的形式返回给Driver程序。为防止Driver程序内存溢出,一般要控制返回的数据集大小。
  3. count():返回RDD中元素的个数。
  4. first():返回RDD中的第一个元素。
  5. take(n):返回一个由RDD的前n个元素组成的数组。即使n=1,返回的也是一个仅有一个元素的数组。对数据集的数据类型和是否有序没有任何规定。
  6. top(n):按默认或指定的排序规则返回前n个元素,默认按降序输出。
  7. takeOrdered(n,[ordering]):按自然顺序或指定的排序规则返回前n个元素。
  8. countByKey():作用于K-V类型的RDD上,统计每个key的个数,返回(K,K的个数)的集合。
  9. collectAsMap():作用于K-V类型的RDD上,将结果以Map的形式返回给Driver程序。与collect不同的是,collectAsMap函数不包含重复的key,对于重复的key,后面的元素会覆盖前面的元素。
  10. lookup(k):作用于K-V类型的RDD上,返回指定K的所有V值。
  11. aggregate(zeroValue:U)(seqOp:(U,T) => U, comOp:(U,U) => U):分区的数据通过初始值zeroValue和分区内的数据进行聚合(seqOp函数),然后再和初始值zeroValue进行分区间的数据聚合(comOp函数)。
  12. fold(zeroValue:T)(op:(T,T) => T):通过op函数聚合各分区中的元素及合并各分区的元素。op函数需要两个参数,在开始时第一个传入的参数为zeroValue。fold函数的作用相当于seqOp和comOp函数都相同的aggregate函数。
  13. saveAsTextFile(path:String):将最终的结果数据以文本的形式保存到指定的HDFS目录或本地文件系统中。
  14. saveAsSequenceFile(path:String):将最终的结果数据以sequence的格式保存到指定的HDFS目录中。

三、Action算子的使用场景

Action算子通常用于数据的最终输出或聚合计算。例如,可以使用collect算子将RDD中的所有数据收集到Driver程序中,然后进行处理或分析;可以使用reduce算子对RDD中的数据进行聚合计算,如求和、求最大值等;可以使用saveAsTextFile或saveAsSequenceFile算子将结果数据保存到外部存储系统中,以便后续使用。

四、注意事项

  1. 在使用Action算子时,需要注意数据的规模和内存限制,以防止内存溢出等问题。
  2. 对于大规模的数据处理任务,建议避免使用collect等会将数据全部收集到Driver程序的Action算子,而使用如saveAsTextFile等将结果直接写入外部存储系统的算子。

Spark中的Action算子是触发Spark作业运行的关键算子之一。它们提供了多种方式来输出和聚合RDD中的数据,为Spark的数据处理和分析提供了强大的支持。

 

 

;