【问题标题】:In memory datasets with Spark在使用 Spark 的内存数据集中
【发布时间】:2014-05-04 23:20:47
【问题描述】:
来自Spark documentation:
Spark 可以在内存中缓存数据集以加快重用速度。在示例中
上面,我们可以使用以下方法仅加载 RAM 中的错误消息:
errors.cache()
我的理解是 Spark 默认在内存中执行所有操作?
那么当一个操作的结果没有被缓存时会发生什么,它是默认持久化到磁盘的吗?
或者它只是意味着操作的结果将在执行后保存在内存中?
【问题讨论】:
标签:
mapreduce
apache-spark
in-memory-database
【解决方案1】:
我的理解是Spark默认在内存中执行所有操作?
不,实际上大多数运算符都没有将结果缓存在内存中。您需要显式调用cache 将它们存储在内存中。
那么当一个操作的结果没有被缓存时会发生什么,它是默认持久化到磁盘的吗?
对于大多数算子来说,Spark 只是创建一个新的 RDD 来包装旧的 RDD。来自“Fast Data Processing with Spark”:
了解即使定义了 RDD,它实际上并不包含数据,这一点至关重要。这意味着当您访问 RDD 中的数据时,它可能会失败。只有在引用数据时才会在 RDD 中创建数据的计算;例如,它是通过缓存或写出 RDD 来创建的。这意味着您可以将大量操作链接在一起,而不必担心过度阻塞。需要注意的是,在应用开发过程中,你可以编写代码、编译代码,甚至运行你的工作,除非你实现 RDD,否则你的代码可能甚至都没有尝试加载原始数据。
因此,除非您调用某些方法来获取结果,否则计算不会开始。这里的物化操作符类似于,首先,收集,saveAsTextFile。除非您调用缓存,否则结果不会存储在内存中。
另外,《Fast Data Processing with Spark》是一本学习 Spark 的好书。