【问题标题】: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 的好书。

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 2017-07-14
      • 2018-09-27
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 2020-08-24
      • 2017-12-11
      • 2017-01-16
      相关资源
      最近更新 更多