2014-03-26 78 views
0

存储数据集从Spark documentation与星火

星火可以在内存中缓存的数据集,以加快重用。 errors.cache()

我的理解是,Spark在内存默认情况下进行所有操作:在上面的例子 ,我们可以使用RAM加载刚刚的错误信息?

那么当一个操作的结果没有被缓存时会发生什么,默认情况下会持久化到磁盘上?

或者这是否意味着操作的结果将会是在执行后会在内存中保留

回答

2

我的理解是Spark默认在内存中执行了所有操作?

不,实际上大多数操作符都没有在内存中缓存结果。您需要明确呼叫cache将它们存储在内存中。

那么当一个操作的结果没有被缓存时会发生什么,默认情况下会持久化到磁盘上?

对于大多数运营商而言,Spark只是创建一个新的RDD来包装旧的RDD。从“Fast Data Processing with Spark”:

关键是要认识到,尽管一个RDD定义,它实际上并没有包含数据。这意味着当你访问RDD中的数据时,它可能会失败。在RDD中创建数据的计算仅在数据被引用时完成;例如,它是通过缓存或写出RDD创建的。这意味着您可以将大量操作链接在一起,而不必担心过度阻塞。重要的是要注意,在应用程序开发过程中,您可以编写代码,编译它,甚至运行您的工作,除非您实现RDD,否则您的代码甚至可能没有尝试加载原始数据。

所以,直到你调用一些方法来获取结果,计算才会开始。在这里,具体化操作符类似于:首先,collect,saveAsTextFile。除非您调用缓存,否则结果不会保存在内存中。

另外,“用Spark快速数据处理”是学习Spark的好书。