首页 理论教育 RDD中的Action:角色与功能解析

RDD中的Action:角色与功能解析

时间:2023-06-29 理论教育 版权反馈
【摘要】:Action算子会触发SparkContext的runJob方法提交作业,触发RDD DAG的执行并将数据输出到Spark系统。Action在RDD(数据集)上进行计算之后返回一个值到Driv-er,这样设计能让Spark运行得更高效。在Spark中,RDD被表示为对象,通过这些对象上的方法或函数调用Transformation。定义RDD之后,可以在Action中使用RDD。Action是向应用程序返回值或向存储系统导出数据的那些操作,如count、collect和save。用户可以通过Partitioner类获取RDD的分区顺序,然后将另一个RDD按照同样的方式分区。

RDD中的Action:角色与功能解析

Action算子会触发SparkContext的runJob方法提交作业(Job),触发RDD DAG的执行并将数据输出到Spark系统。Action在RDD(数据集)上进行计算之后返回一个值到Driv-er,这样设计能让Spark运行得更高效。

Spark中的RDD转换(Transformation)和动作(Action),每个操作都给出标识,其中方括号表示类型参数。前面说过Transformation是延迟操作,用于定义新的RDD;而Action启动计算操作,并向应用程序返回值或向外部存储写数据。

在Spark中,RDD被表示为对象,通过这些对象上的方法或函数调用Transformation。定义RDD之后,可以在Action中使用RDD。Action是向应用程序返回值或向存储系统导出数据的那些操作,如count(返回RDD中的元素个数)、collect(返回元素本身)和save(将RDD输出到存储系统)。在Spark中,只有在Action第一次使用RDD时,才会计算RDD(即延迟计算)。这样在构建RDD时,运行时通过Pipline方法传输多个Transformation算子。另外RDD还允许根据关键字(key)指定分区顺序,这是一个可选的功能。目前支持Hash分区和Range分区,例如,应用程序请求将两个RDD按照同样的Hash方式进行分区(将同一机器上具有相同关键字的记录放在一个分区),以加速它们之间的join操作,多次迭代之间采用一致的分区置换策略进行优化,允许指定这样的优化。

RDD提供了很多Transformations操作算子,每个转换操作算子都会生成新的RDD,新的RDD依赖于原有的RDD,这种RDD之间的依赖关系最终形成DAG。DAG经过Shuffle处理后形成Stage。表1-1列出了一些常用的算子。(www.xing528.com)

表1-1 常用算子表

978-7-111-55442-4-Chapter01-41.jpg

有些hash值针对Key-Value键值对可用,例如groupByKey,另外,函数名与Scala及其他函数式语言中的API匹配,例如,map是一对一的映射,而flatMap是将每个输入映射为一个或多个输出。用户可以通过Partitioner类获取RDD的分区顺序,然后将另一个RDD按照同样的方式分区。有些操作会自动产生一个hash或范围分区的RDD,如groupByKey、reduceByKey和sort等。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈