gpt4 book ai didi

apache-spark - 缓存后立即“采取”操作 RDD 仅导致 2% 的缓存

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

我有一个 RDD,它是通过读取一个大小约为 117MB 的本地文本文件形成的。

scala> rdd
res87: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[3] at textFile at <console>:24

我缓存 RDD:-

scala> rdd.persist()
res84: rdd.type = MapPartitionsRDD[3] at textFile at <console>:24

在此之后,我调用 RDD 上的“take(1)”操作来强制执行评估。完成后,我检查 Spark UI 的存储页面。它显示缓存的分数仅为 2%,内存大小为 6.5MB。然后我在 RDD 上调用“count”操作。在此之后,当我检查 Spark UI 存储页面时,我突然发现这些数字现在已经改变了。缓存的比例为 82%,内存大小为 258.2MB。这是否意味着即使在缓存 RDD 之后,Spark 也只真正缓存后续操作真正需要的内容(因为 take(1) 只读取一个顶级元素)?当触发第二个 Action 'count'时,它需要接触所有元素,所以它最终也缓存了剩余部分?我没有遇到过任何记录在案的此类行为,这是错误吗?

最佳答案

根据源代码,你是对的。 RDD 引用仅保存到持久化 RDD 的 HashMap 中,并在调用 persist() 时注册到特殊清理器。所以缓存是在真正读取数据的时候进行的。此外,它还可以被替换(例如,当内存不足且不存在对数据的事件引用时)。

关于apache-spark - 缓存后立即“采取”操作 RDD 仅导致 2% 的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31509034/

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