当我运行如下代码时:
val newRDD = prevRDD.map(a => (a._1, 1L)).distinct.persist(StorageLevel.MEMORY_AND_DISK_SER)
newRDD.checkpoint
print(newRDD.count())
并观察 Yarn 中的各个阶段,我注意到 Spark 正在执行 DAG 计算 TWICE——一次用于实现 RDD 并缓存它的 distinct+count,然后完全是第二次创建检查点副本。
既然 RDD 已经物化和缓存了,为什么检查点不简单地利用这一点,将缓存的分区保存到磁盘呢?
是否有现有的方法(某种配置设置或代码更改)来强制 Spark 利用这一点并且只运行一次操作,而检查点只会复制东西?
我是否需要“实现”两次?
val newRDD = prevRDD.map(a => (a._1, 1L)).distinct.persist(StorageLevel.MEMORY_AND_DISK_SER)
print(newRDD.count())
newRDD.checkpoint
print(newRDD.count())
我创建了一个 Apache Spark Jira 票证,以使其成为功能请求: https ://issues.apache.org/jira/browse/SPARK-8666