大数据学习(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的数据处理和分析提供了强大的支持。

相关推荐
副露のmagic10 分钟前
更弱智的算法学习 day28
学习
汽车仪器仪表相关领域11 分钟前
全自动化精准检测,赋能高效年检——NHD-6108全自动远、近光检测仪项目实战分享
大数据·人工智能·功能测试·算法·安全·自动化·压力测试
大厂技术总监下海13 分钟前
根治LLM胡说八道!用 Elasticsearch 构建 RAG,给你一个“有据可查”的AI
大数据·elasticsearch·开源
ha204289419416 分钟前
Linux操作系统学习记录之---TcpSocket
linux·网络·c++·学习
凉、介2 小时前
深入 QEMU Guest Agent:虚拟机内外通信的隐形纽带
c语言·笔记·学习·嵌入式·虚拟化
崇山峻岭之间2 小时前
Matlab学习记录31
开发语言·学习·matlab
石像鬼₧魂石2 小时前
22端口(OpenSSH 4.7p1)渗透测试完整复习流程(含实战排错)
大数据·网络·学习·安全·ubuntu
TDengine (老段)2 小时前
TDengine Python 连接器进阶指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
云半S一3 小时前
pytest的学习过程
经验分享·笔记·学习·pytest
微露清风3 小时前
系统性学习C++-第二十讲-哈希表实现
c++·学习·散列表