gpt4 book ai didi

hadoop - Spark RDD 持久化和分区

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

例如在Spark中创建某个RDD时:

lines = sc.textFile("README.md")

然后在这个 RDD 上调用一个转换:

pythonLines = lines.filter(lambda line: "Python" in line)

如果你在这个转换后的过滤器 RDD 上调用一个 Action (例如 pythonlines.first)当他们说每次你运行一个 Action 时 RDD 将被重新计算是什么意思在他们身上?我认为在您对该原始 RDD 调用 filter 转换后,您使用 textFile 方法创建的原始 RDD 不会保留。那么它是否会重新计算最近转换的 RDD,在这种情况下,它是我使用过滤器转换创建的 RDD?如果我的假设是正确的,我真的不明白为什么有必要这样做?

最佳答案

在 spark 中,RDD 是惰性评估的。这意味着如果你简单地写

lines = sc.textFile("README.md").map(xxx)

您的程序将在不读取文件的情况下退出,因为您从未使用过结果。如果你这样写:

linesLength = sc.textFile("README.md").map(line => line.split(" ").length)
sumLinesLength = linesLength.reduce(_ + _) // <-- scala way
maxLineLength = linesLength.max()

lineLength 所需的计算将进行两次,因为您在两个不同的地方重复使用它。为避免这种情况,您应该在以两种不同的方式使用之前保留生成的 RDD

linesLength = sc.textFile("README.md").map(line => line.split(" ").length)
linesLength.persist()
// ...

你也可以看看https://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence .希望我的解释不会太困惑!

关于hadoop - Spark RDD 持久化和分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36295731/

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