下一个RDD实现后,之前的RDD会发生什么?

时间:2016-05-12 06:13:44

标签: apache-spark

在spark中,我想知道在下一个RDD实现时,先前的RDD会发生什么。

假设我有以下scala代码

val lines = sc.textFile("/user/cloudera/data.txt")
val lineLengths = lines.map(s => s.length)
val totalLength = lineLengths.reduce((a, b) => a + b)

我有linesRDD是一个基础RDD  同样我有linesLengths RDD

我知道在调用reduce Action时会实现这两个RDD。

我的问题是当数据流过这两个RDD时,当linesLengthsRDD实现时,linesRDD会发生什么。

一旦linesLengthsRDD实现了,那么lineRDD内的数据会被删除吗?

让我们说在生产火花工作中可能有100个RDD,一个Action被称为第100个RDD。

当第99个RDD实现时,第一个RDD中的数据会发生什么?

所有RDD中的数据只被删除,相应的最终Action返回相应的输出?

一旦RDD按照DAG将数据传递到下一个RDD,每个RDD中的数据会自动删除吗?

1 个答案:

答案 0 :(得分:0)

实际上,line和lineLength都会在reduce之后保留它们的rdds。正如您所提到的,您可以将rdd视为转换的DAG。因此,如果以后您想在行或lineLength上执行其他一些转换,您可以。即使它们在reduce期间实现,除非您直接缓存,否则当它们所属的DAG上将调用另一个操作时,它们将再次运行它们的转换。