gpt4 book ai didi

hadoop - Spark RDD 沿袭和存储

转载 作者:可可西里 更新时间:2023-11-01 16:25:12 24 4
gpt4 key购买 nike

inputRDD = sc.textFile("log.txt")
errorsRDD = inputRDD.filter(lambda x: "error" in x)
warningsRDD = inputRDD.filter(lambda x: "warning" in x)
badLinesRDD = errorsRDD.union(warningsRDD)
badLinesCount = badLinesRDD.count()
warningCount = warningsRDD.count()

在上面的代码中,在倒数第二行代码执行之前,不会评估任何转换,您计算了 badLinesRDD 中的对象数量。因此,当运行此 badLinesRDD.count() 时,它将计算前四个 RDD,直到联合并返回结果。但是当 warningsRDD.count() 运行时,它只会计算转换 RDD,直到前 3 行并返回一个正确的结果?

此外,当这些 RDD 转换被计算时,当对它们调用操作时,最后一个 RDD 转换(联合)的对象存储在哪里?它是否存储在并行运行过滤器转换的每个 DataNode 的内存中?

最佳答案

除非任务输出显式持久化(例如 cachepersist)或隐式持久化(shuffle write)并且有足够的可用空间,否则每个 Action 都会执行完整的沿袭。

因此,当您调用 warningsRDD.count() 时,它将加载文件 (sc.textFile("log.txt")) 和过滤器 (inputRDD .filter(lambda x: x 中的“警告”)).

Also when these RDD transformations are computed when an action is called on them where are the objects from the last RDD transformation, which is union, stored?

假设数据没有持久化,无处可去。在数据传递到下一阶段或输出后,所有任务输出都将被丢弃。数据是否持久化取决于设置(磁盘、堆上、堆外、DFS)。

关于hadoop - Spark RDD 沿袭和存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36300301/

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