如何在Spark内存中长期保存Cassandra table?

How to store Cassandra table in Spark memory for long time?

我正在使用 Spark 和 Spark-Cassandra 连接器从 Cassandra 收集数据。我有它的 Web 应用程序,它具有单个共享的 SparkContext 和 REST api。处理有下一个流程:

  1. 阅读 Cassandra table
  2. 准备过滤(Spark 转换序列)
  3. 根据api调用参数过滤准备好的RDD

在上面的算法中,每次调用只有第三步不同(取决于 api 请求参数)。 Api 请求以并行模式执行(每个请求线程)。由于 table 中的数据不是非常动态,而且我的 spark worker 有足够的内存来存储整个 table 我想在第二步之后保留我的 RDD,并且在每个请求中只过滤已经保留的 RDD。我也想定期更新这个 RDD。实现它的最佳方法是什么?

您可以在第 2 步之后对 RDD 调用 persist。RDD 将在调用第一个操作时计算并缓存。当需要刷新数据时,调用unpersist即可。这将导致 Spark 丢弃旧缓存,然后在执行操作时存储新缓存。基本上,你会做这样的事情。

var data = loadAndFilter()
while (!stop) {
  data.persist()
  // Do step 3

  // Drop the old cache
  data.unpersist(false)
  // Load the fresh data
  data = loadAndFilter()
}