gpt4 book ai didi

apache-spark - Spark中的RDD依赖是什么?

转载 作者:行者123 更新时间:2023-12-04 04:18:11 25 4
gpt4 key购买 nike

据我所知,有两种依赖关系:窄与宽 .但我不明白依赖性如何影响 child RDD .是 child RDD 仅包含如何从 构建新 RDD block 的信息的元数据父 RDD ?或 child RDD 是从 创建的自给自足数据集父 RDD ?

最佳答案

是的,子 RDD 是描述如何从父 RDD 计算 RDD 的元数据。

考虑 org/apache/spark/rdd/MappedRDD.scala 例如:

private[spark]
class MappedRDD[U: ClassTag, T: ClassTag](prev: RDD[T], f: T => U)
extends RDD[U](prev) {

override def getPartitions: Array[Partition] = firstParent[T].partitions

override def compute(split: Partition, context: TaskContext) =
firstParent[T].iterator(split, context).map(f)
}

当你说 rdd2 = rdd1.map(...) , rdd2会是这样的 MappedRDD . compute仅稍后执行,例如当您调用 rdd2.collect 时.

RDD 总是这样的元数据,即使它没有父级(例如 sc.textFile(...) )。 RDD 存储在节点上的唯一情况是使用 rdd.cache 将其标记为缓存。 ,然后导致它被计算。

另一种类似情况调用 rdd.checkpoint .该函数将 RDD 标记为检查点。下次计算时,它会被写入磁盘,以后访问 RDD 会导致它从磁盘读取而不是重新计算。
cache 之间的区别和 checkpoint是缓存的 RDD 仍然保留其依赖关系。缓存的数据在内存压力下可能会被丢弃,可能需要部分或全部重新计算。带有检查点的 RDD 不会发生这种情况,因此依赖项会在那里被丢弃。

关于apache-spark - Spark中的RDD依赖是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28514509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com