Spark-做转换还涉及驱动程序操作

时间:2018-08-26 18:54:58

标签: apache-spark

我的课程笔记有以下句子:“ RDD支持两种类型的操作:转换(从现有操作创建新的数据集)和动作(在对数据集执行计算后将值返回给驱动程序)。 ”但是我认为这会产生误导,因为 reduceByKey 转换是在本地先在工人上执行的,然后再在驾驶员上执行(尽管更改要等到执行一项操作后才能进行)。如果我错了,请您纠正我。

2 个答案:

答案 0 :(得分:0)

事实上,驾驶员的首要责任是管理工作。此外,RDD的对象不位于驱动程序上,无法对其执行操作。因此,所有结果都取决于工作人员,直到采取行动为止。我的意思是关于spark的延迟执行,这意味着在执行开始时首先将计划重新审核为第一个动作,如果找不到任何内容,则整个程序将不会有任何结果。否则,整个程序将在输入数据上执行,该数据将作为rdd对象呈现在工作程序节点上以到达操作,并且此期间的所有数据都将在工作程序上,并且仅根据操作类型生成结果将发送给驾驶员或至少由驾驶员管理。

答案 1 :(得分:0)

这里是概念

在Spark Transformation中定义一个RDD在何处生成一个或多个RDD。每次创建新的RDD。 RDD是不可变的,因此在一个RDD上进行任何转换都会生成一个新的RDD,并将其添加到DAG中。

spark中的动作是不生成新RDD的函数,它不会生成其其他数据类型(如String,int等),并将结果返回到驱动程序或其他存储系统。

转换本质上是惰性的,在触发动作之前什么也不会发生。

reduceByKey-它是一种转换,因为它根据输入RDD生成RDD并进行WIDE转换。在按键减少操作之前,什么也没有发生。请看下面的图片

enter image description here

reduce-生成非RDD类型的操作。请看下面的图片

enter image description here