【问题标题】:Does spark cache rdds automatically after shuffle?洗牌后是否会自动触发缓存rdds?
【发布时间】:2021-02-01 20:10:23
【问题描述】:

我试过下面的代码,rdd2 只会计算一次。剂量 spark 缓存所有 shuffle rdd 自动?
我注意到 Dataframe shuffle 结果不会自动缓存。

val rdd2: RDD[(String, Int)] = spark.sparkContext.parallelize(Array("jan"))
      .map(x => {
        println("---")
        (x, 1)
      }).reduceByKey(_ + _)
    rdd2.count()
    rdd2.count()

【问题讨论】:

  • nope spark 是惰性求值的,这意味着只有动作(不会生成另一个 rdd)会触发计算,就像您的计数一样,除非您明确调用 .cache(),否则不会缓存中间 rdd .persist()

标签: apache-spark


【解决方案1】:

某些数据(如中间随机数据)会自动持久化。 官网有以下sentence

Spark 还会在 shuffle 操作(例如 reduceByKey)中自动持久化一些中间数据,即使没有用户调用 persist。这样做是为了避免在 shuffle 期间节点失败时重新计算整个输入。如果用户打算重用它,我们仍然建议用户在生成的 RDD 上调用 persist。

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 2012-04-03
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    相关资源
    最近更新 更多