Spark可以将数据集缓存在内存中以加速重用。在示例中 上面,我们可以使用以下命令在RAM中加载错误消息:
errors.cache()
我的理解是Spark默认在内存中执行所有操作?
那么当没有缓存操作的结果时会发生什么,默认情况下它是否持久保存到磁盘?
或者它只是意味着在执行后操作的结果将保持在内存中?
答案 0 :(得分:2)
我的理解是Spark默认在内存中执行了所有操作?
不,实际上大多数运营商都没有将结果缓存在内存中。您需要显式调用cache
将它们存储在内存中。
那么当没有缓存操作的结果时会发生什么,默认情况下它是否持久保存到磁盘?
对于大多数操作员来说,Spark只是创建一个新的RDD来包装旧的RDD。来自" Fast Data Processing with Spark":
至关重要的是要理解即使定义了RDD,它实际上也不包含数据。这意味着当您访问RDD中的数据时,它可能会失败。在RDD中创建数据的计算仅在引用数据时完成;例如,它是通过缓存或写出RDD创建的。这意味着您可以将大量操作链接在一起,而不必担心过度阻塞。重要的是要注意,在应用程序开发期间,您可以编写代码,编译代码,甚至运行您的工作,除非您实现RDD,否则您的代码可能甚至没有尝试加载原始数据。
因此,在调用某些方法获取结果之前,计算不会启动。这里的实现操作符类似于:first,save,saveAsTextFile。除非您调用缓存,否则结果不会存储在内存中。
此外,"使用Spark进行快速数据处理"是一本学习Spark的好书。