在使用Spark的内存数据集中

时间:2014-03-26 13:48:39

标签: mapreduce apache-spark in-memory-database

来自Spark documentation

  

Spark可以将数据集缓存在内存中以加速重用。在示例中   上面,我们可以使用以下命令在RAM中加载错误消息:   errors.cache()

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

那么当没有缓存操作的结果时会发生什么,默认情况下它是否持久保存到磁盘?

或者它只是意味着在执行后操作的结果将保持在内存中?

1 个答案:

答案 0 :(得分:2)

  

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

不,实际上大多数运营商都没有将结果缓存在内存中。您需要显式调用cache将它们存储在内存中。

  

那么当没有缓存操作的结果时会发生什么,默认情况下它是否持久保存到磁盘?

对于大多数操作员来说,Spark只是创建一个新的RDD来包装旧的RDD。来自" Fast Data Processing with Spark":

  

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

因此,在调用某些方法获取结果之前,计算不会启动。这里的实现操作符类似于:first,save,saveAsTextFile。除非您调用缓存,否则结果不会存储在内存中。

此外,"使用Spark进行快速数据处理"是一本学习Spark的好书。