【问题标题】:Apache Spark what am I persisting here?Apache Spark 我在这里坚持什么?
【发布时间】:2016-07-11 23:25:23
【问题描述】:

在这一行中,哪个 RDD 被持久化了? dropResultsN 还是 dataSetN?

dropResultsN = dataSetN.map(s -> standin.call(s)).persist(StorageLevel.MEMORY_ONLY());

问题是来自Apache Spark timing forEach operation on JavaRDD 的一个附带问题,我仍在为如何最好地安排 RDD 创建时间这一核心问题寻找一个好的答案。

【问题讨论】:

    标签: java scala apache-spark rdd timing


    【解决方案1】:

    dropResultsN 是持久化的 RDD(这是通过将 dataSetN 映射到方法 standin.call() 产生的 RDD)。

    【讨论】:

    • 这也是我的想法,当我取消调用时,Spark(疯狂地)不断重新计算 RDD,即使它应该包含在要在此应用程序中运行的任务的 DAG 中。如果您的答案包含指向某些内容的链接并引用该内容,那就太好了。在不深入研究源代码的情况下,我将在接下来进行。
    • NVM previous comment我在Learning Spark中找到了一个很好的例子并发布了一个单独的答案
    【解决方案2】:

    我在 O'Reilly 的 Learning Spark 中找到了一个很好的例子:

    示例 3-40。 Scala中的persist()(假设Java相同)

    import org.apache.spark.storage.StorageLevel
    
    val result = input.map( x => x*x )
    result.persist(StorageLevel.[<your choice>][1])
    

    Learning Spark 中的注意事项:注意我们在 RDD 上调用了 persist() 在第一个动作之前。 persist() 调用本身不会强制 评估。

    请注意,在本例中,persist 位于下一行,我认为这比我的问题中的代码更清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 2021-07-27
      • 2011-04-22
      相关资源
      最近更新 更多