GraphX的图运算操作 - 缓存操作

优质
小牛编辑
186浏览
2023-12-01

Spark中,RDD默认是不缓存的。为了避免重复计算,当需要多次利用它们时,我们必须显示地缓存它们。GraphX中的图也有相同的方式。当利用到图多次时,确保首先访问Graph.cache()方法。

在迭代计算中,为了获得最佳的性能,不缓存可能是必须的。默认情况下,缓存的RDD和图会一直保留在内存中直到因为内存压力迫使它们以LRU的顺序删除。对于迭代计算,先前的迭代的中间结果将填充到缓存
中。虽然它们最终会被删除,但是保存在内存中的不需要的数据将会减慢垃圾回收。只有中间结果不需要,不缓存它们是更高效的。然而,因为图是由多个RDD组成的,正确的不持久化它们是困难的。对于迭代计算,我们建议使用Pregel API,它可以正确的不持久化中间结果。

GraphX中的缓存操作有cache,persist,unpersistunpersistVertices。它们的接口分别是:

  1. def persist(newLevel: StorageLevel = StorageLevel.MEMORY_ONLY): Graph[VD, ED]
  2. def cache(): Graph[VD, ED]
  3. def unpersist(blocking: Boolean = true): Graph[VD, ED]
  4. def unpersistVertices(blocking: Boolean = true): Graph[VD, ED]