来自Spark文档:
Spark可以在内存中缓存数据集以加快重用。在这个例子中上面,我们可以使用以下命令在RAM中加载错误消息:
errors.cache()
我的理解是Spark默认在内存中执行所有操作?
那么,当操作的结果没有缓存时会发生什么,默认情况下是持久化到磁盘吗?
或者它仅仅意味着操作的结果将在执行后保存在内存中?
我的理解是Spark默认在内存中执行所有操作?
不,实际上大多数操作符都没有在内存中缓存结果。您需要显式地调用cache
来将它们存储在内存中。
那么,当操作的结果没有缓存时会发生什么,默认情况下是持久化到磁盘吗?
对于大多数运营商来说,Spark只是创建一个新的RDD来包装旧的RDD。选自"使用Spark进行快速数据处理":
重要的是要理解,即使定义了RDD,它实际上并不包含数据。这意味着当您访问RDD中的数据时,它可能会失败。在RDD中创建数据的计算只在数据被引用时完成;例如,它是通过缓存或写入RDD来创建的。这意味着您可以将大量操作链接在一起,而不必担心过度阻塞。重要的是要注意,在应用程序开发期间,您可以编写代码,编译它,甚至运行您的作业,除非您实现RDD,否则您的代码甚至可能不会尝试加载原始数据。
所以直到你调用一些方法来获取结果,计算才会开始。这里物化操作符是,首先,collect, saveAsTextFile。除非调用cache,否则结果不会存储在内存中。
此外,《快速数据处理与Spark》是一本学习Spark的好书。