SPARK 内存计算
SPARK In Memory Computation
如果 Spark 本身在内存中计算其所有 RDD 操作,那么将 RDD 持久化在内存中有什么不同?
我们可以持久化 RDD 以在以后对 RDD 应用多个操作或调用操作。坚持之后,RDD spark 将跳过我计算执行 Action 所需的所有阶段。在 spark 中,所有转换都是惰性评估的,这意味着当您调用操作时,所有转换都将真正执行,因此如果您第一次调用 collect() ,它将执行所有转换并保留一个 RDD 现在如果您再次 运行另一个像计数这样的动作它不会重新执行所有转换只是在坚持之前跳过所有并执行非持久部分例如
val list = sc.parallelize(List(1,23,5,4,3,2))
val rdd1 = list.map(_+1)
val rdd2 = rdd1.map(_+5).cache
rdd2.collect
rdd2.count
就像上面的例子一样,当 rdd2.collect 调用时,它会执行上面所有的转换,因为你注意到 rdd2 已经缓存了,所以现在当调用 count 时,它不会执行上面的转换,而是使用持久化的 rdd 来计算结果。
如果 Spark 本身在内存中计算其所有 RDD 操作,那么将 RDD 持久化在内存中有什么不同?
我们可以持久化 RDD 以在以后对 RDD 应用多个操作或调用操作。坚持之后,RDD spark 将跳过我计算执行 Action 所需的所有阶段。在 spark 中,所有转换都是惰性评估的,这意味着当您调用操作时,所有转换都将真正执行,因此如果您第一次调用 collect() ,它将执行所有转换并保留一个 RDD 现在如果您再次 运行另一个像计数这样的动作它不会重新执行所有转换只是在坚持之前跳过所有并执行非持久部分例如
val list = sc.parallelize(List(1,23,5,4,3,2))
val rdd1 = list.map(_+1)
val rdd2 = rdd1.map(_+5).cache
rdd2.collect
rdd2.count
就像上面的例子一样,当 rdd2.collect 调用时,它会执行上面所有的转换,因为你注意到 rdd2 已经缓存了,所以现在当调用 count 时,它不会执行上面的转换,而是使用持久化的 rdd 来计算结果。