gpt4 book ai didi

scala - 在持久化 RDD 上有多个操作的情况下,缓存 RDD 的工作原理

转载 作者:行者123 更新时间:2023-12-01 09:13:32 24 4
gpt4 key购买 nike

val logList: RDD[String] = ...
val errorLogs = logList.filter(_.contains("Error")).persist()
//first action
val first100 = errorLogs.take(100)
//second action
val count = errorLogs.count

persist 将如何处理这种情况?在以下代码的情况下

val errorLogs = logList.filter(_.contains("Error")).take(100)

Spark 不会扫描所有日志,因为Spark 知道我们只对 100 行日志感兴趣。但是当我们缓存这个 RDD 并在其上调用多个操作时会发生什么,第一个操作只需要很少的记录,后面的操作需要转换整个 RDD。

当第一个 Action 被调用时它会缓存记录吗?还是仅缓存调用第一个操作时第一个操作所需的部分记录?

最佳答案

在这种情况下,Spark 将只缓存收集 100 条记录所需的最小分区数(由于采取实现,实际数量可能更高)。

只有第二个保证缓存所有记录。

关于scala - 在持久化 RDD 上有多个操作的情况下,缓存 RDD 的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51620018/

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