看起来广播方法在我的集群中创建了 RDD 的分布式副本。另一方面,执行cache()方法只是将数据加载到内存中。
但是我不明白缓存的RDD在集群中是如何分布的。
您能告诉我在什么情况下应该使用 rdd.cache() 和 rdd.broadcast() 方法吗?
最佳答案
cache()或 persist() 允许跨操作使用数据集。
当您持久 RDD 时,每个节点都会将其计算的任何分区存储在内存中,并在该数据集(或从其派生的数据集)上的其他操作中重用它们。这使得 future 的操作速度更快(通常快 10 倍以上)。 缓存是迭代算法和快速交互使用的关键工具。
每个持久化的 RDD 都可以使用不同的存储级别进行存储,例如,允许您将数据集持久化在磁盘上、将其持久化在内存中,但作为序列化的 Java 对象(以节省空间), 跨节点复制,或堆外存储
Broadcast variables允许程序员在每台机器上缓存一个只读变量,而不是随任务传送它的副本。例如,它们可用于以有效的方式为每个节点提供大型输入数据集的副本。 Spark还尝试使用高效的广播算法来分发广播变量,以降低通信成本。
您可以在此处找到更多详细信息documentation页。
有用的帖子:
关于caching - Spark 缓存与广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38056774/