我正在使用Spark和Spark-Cassandra连接器来集中来自Cassandra的数据。我有单独的共享SparkContext和REST api的Web应用程序。处理有下一个流程:
在上面的算法中,每个调用只有第三步不同(取决于api请求参数)。 Api请求以并行方式执行(每个请求的线程)。由于表中的数据不是非常动态,并且我的spark工作者有足够的内存来存储整个表,我希望在第二步之后保留我的RDD并且在每个请求上只过滤器已经保持RDD。另外,我想定期更新此RDD。实现它的最佳方法是什么?
答案 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()
}