Chr*_*ord 5 caching apache-spark rdd
观看关于 Spark 内部结构的这段非常好的视频,演示者说,除非在缓存 RDD 后对其执行操作,否则缓存不会真正发生。
我从未见过在任何其他情况下调用 count() 。所以,我猜测他只是在 cache() 之后调用 count() 来强制他给出的简单示例中的持久性。没有必要每次在代码中调用cache() 或persist() 时都执行此操作。这是正确的吗 ?
除非在缓存后对 RDD 执行操作,否则缓存不会真正发生。
这是100%正确的。方法cache
/persist
只会将 RDD 标记为缓存。每当在 RDD 上调用操作时,RDD 内的项目都会被缓存。
...在他给出的简单示例中,仅在 cache() 之后调用 count() 来强制持久化。没有必要每次在代码中调用cache() 或persist() 时都执行此操作。这是正确的吗 ?
你又100%正确了。但我会对此进行详细说明。
为了便于理解,请考虑下面的示例。
rdd.cache()
rdd.map(...).flatMap(...) //and so on
rdd.count() //or any other action
Run Code Online (Sandbox Code Playgroud)
假设您的 RDD 中有 10 个文档。当上面的代码片段运行时,每个文档都会执行以下任务:
另一方面,
rdd.cache().count()
rdd.map(...).flatMap(...) //and so on
rdd.count() //or any other action
Run Code Online (Sandbox Code Playgroud)
当上面的代码片段运行时,首先缓存所有 10 个文档(整个 RDD)。然后应用map函数和flatMap函数。
两者都是正确的,并且按照要求使用。希望这能让事情变得更加清楚。
归档时间: |
|
查看次数: |
8935 次 |
最近记录: |