如何长时间将Cassandra表存储在Spark内存中?

时间:2016-07-05 13:47:33

标签: apache-spark cassandra spark-cassandra-connector

我正在使用Spark和Spark-Cassandra连接器来集中来自Cassandra的数据。我有单独的共享SparkContext和REST api的Web应用程序。处理有下一个流程:

  1. 阅读Cassandra表
  2. 准备过滤(Spark变换序列)
  3. 根据api调用参数过滤准备好的RDD
  4. 在上面的算法中,每个调用只有第三步不同(取决于api请求参数)。 Api请求以并行方式执行(每个请求的线程)。由于表中的数据不是非常动态,并且我的spark工作者有足够的内存来存储整个表,我希望在第二步之后保留我的RDD并且在每个请求上只过滤器已经保持RDD。另外,我想定期更新此RDD。实现它的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以在步骤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()
}