Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 在操作之前联合父rdd和子rdd会发生什么情况?_Hadoop_Apache Spark_Rdd - Fatal编程技术网

Hadoop 在操作之前联合父rdd和子rdd会发生什么情况?

Hadoop 在操作之前联合父rdd和子rdd会发生什么情况?,hadoop,apache-spark,rdd,Hadoop,Apache Spark,Rdd,假设我有一些rdd,其沿袭如下: rdd0->rdd1->rdd2->rdd3->rdd4 当我执行rdd1.unionrdd2.unionrdd3.unionrdd4.collect时会发生什么?在计算rdd4时,spark会重新计算从rdd0到rdd3的转换吗?union是一种转换,因此,当您执行val x=a unionb时,它会将一个新元素添加到由标识符x引用的沿袭中。在这一点上,没有什么是真正计算出来的。将其视为添加了元素的蓝图。当在x上调用一个动作时,这个蓝图将从添加的第一个元素开始

假设我有一些rdd,其沿袭如下:

rdd0->rdd1->rdd2->rdd3->rdd4

当我执行rdd1.unionrdd2.unionrdd3.unionrdd4.collect时会发生什么?在计算rdd4时,spark会重新计算从rdd0到rdd3的转换吗?

union是一种转换,因此,当您执行val x=a unionb时,它会将一个新元素添加到由标识符x引用的沿袭中。在这一点上,没有什么是真正计算出来的。将其视为添加了元素的蓝图。当在x上调用一个动作时,这个蓝图将从添加的第一个元素开始执行

现在,在您的例子中,当您执行rdd1.unionrdd2.unionrdd3.unionrdd4.collect时,您基本上在蓝图中添加了3个元素:rdd1和rdd2的结果、rdd3与先前结果的并集以及rdd4与先前结果的并集。现在,当您在这个最终结果上调用collect时,蓝图最终从一开始执行

如果您在很多操作中使用rdd1,最好缓存/持久化它,否则它将重新计算


让我知道这是否有帮助,干杯。

当你给工会打电话时,spark将得到一个新的RDD。此RDD让成员保留其父级以计算其依赖性。依赖关系用于生成DAG。DAG用于在调用操作时生成阶段。

谢谢!我知道只有在采取行动时,工会才会被执行。实际上我关心的是,是否有必要缓存我的rdd1。您的意思是当执行操作时,它将计算rdd0->rdd1+rdd0->rdd1->rdd2+rdd0->rdd1->rdd2->rdd3+。。。。。或者它可以自动优化为rdd0->rdd1+rdd1->rdd2+rdd2->rdd3+…?是的,在这种情况下,您需要缓存数据。所以,如果您在很多操作中使用rdd1,最好缓存/持久化它,否则它将重新计算