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



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

  1. 阅读卡桑德拉表
  2. 准备筛选(Spark 转换序列)
  3. 根据 api 调用参数过滤准备好的 RDD

在上面的算法中,每次调用只有第三步是不同的(取决于 api 请求参数)。API 请求以并行模式执行(每个请求的线程数)。由于表中的数据不是很动态,并且我的火花工人上有足够的内存来存储整个表,我想在第二步后保留我的 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()
}

最新更新