gpt4 book ai didi

scala - Spark缓存RDD而不被要求

转载 作者:行者123 更新时间:2023-12-03 23:22:24 24 4
gpt4 key购买 nike

根据 Spark 文档,如果我们不“缓存”给定的 RDD,那么每次我们引用它时,都会评估 RDD 背后的业务逻辑(图表)。但在实践中,当我使用 Spark shell 尝试这样做时,我发现即使我们没有显式缓存,仍然使用“内存中”副本。当我们不要求时,为什么 Spark 会缓存 RDD?我在 Windows 上使用独立模式的 Spark,与此有关吗?

那么让我描述一下我做了什么。我创建了一个简单的文本文件:-

key1,value1
key2,value2
key3,value3

现在我从 Spark 的 Scala shell 创建了一个 RDD 为:-

val rdd = sc.textFile("sample.txt").map(line => line.split(",")).map(line => (line(0),line(1)))

现在,当我对这个 RDD 执行以下操作时,我得到值 1:-

rdd.lookup("key1")

目前一切正常。现在我打开原始源文件并向其中添加一个条目:-

key4,value4

我保存文件。现在从同一个 shell(我还没有退出 shell),我触发了以下操作:-

rdd.lookup("key4")

它返回空列表,所以基本上是说它没有找到 key4 的条目。这意味着 Spark 仍在使用它显然保存在内存中的旧副本。否则如果你说的对,它应该从头开始评估RDD的完整业务逻辑,那么它就会获得key4,value4。但它完全不知道文件中的这一新行。为什么会这样?我显然还没有缓存 RDD,它仍然指的是旧版本的文件。

谢谢

最佳答案

我可以使用 Apache Spark 1.3.0 重现此行为。我也想用 1.4.0 重现它,因为它可以很好地了解阶段中发生的转换。但在 Spark 1.4.0 中 rdd.lookup("key4") 有效!

我认为这意味着该行为是由错误引起的。我找不到错误编号。

关于scala - Spark缓存RDD而不被要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31097751/

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