Cassandra table 上的 Spark SQL 使用 Spark Streaming 填充

Spark SQL on Cassandra table that is populated with Spark Streaming

我有一个实时填充 Cassandra 的 Spark Streaming 进程 table。我想对该 Cassandra table 进行查询,以访问基础数据。

CQL 的语法非常有限(受限于 where 条件,没有分组依据),所以我考虑在它之上使用 Spark SQL。

但是一旦我加载了数据框,它就看不到基础数据的任何变化。如何不断刷新数据框,让自己时刻看到数据变化?

Srdjan

我知道这是一个较旧的 post,但这里似乎有一个反复出现的主题。需要对已摄取到 NoSQL 存储的数据进行全功能查询,而 Spark SQL 提供了执行此操作的能力。走这条路时需要考虑的几件事

1> 如果直接使用 Spark 连接器对数据存储进行操作,即使使用谓词下推,也必须将相关列从 Cassandra/Other NoSQL 存储移动到 Spark 以便 运行 查询。缓存已移入 Spark 的数据没有什么意义,因为临时查询确保下一个查询需要一组不同的数据,这意味着再次重复该过程并导致 Spark 进程中的流失,并抑制性能

2> 如果沿着简单地将数据存储中的所有数据加载到 Spark 的路径前进,那么你就会遇到上面提到的陈旧问题,因为 Spark 是一个不可变的缓存。一种解决方案是在 Spark 中的数据上设置 TTL(生存时间),并经常从头开始重新创建数据帧,这是浪费和低效的,而且不清楚查询时会发生什么完成

最佳解决方案(SnappyData 是我所知道的)只是将数据帧转换为可变实体,以便可以在 Spark 中对 NoSQL 存储中的数据进行 CDC 处理,而您可以使用 Spark SQL 执行查询,而无需离开 Spark 集群或不必为每个查询将数据移动到 Spark。这具有显着的性能优势(数据可以以列格式存储,查询可以 p运行ed,可以避免不必要的序列化成本,利用 Spark 中的代码生成来更快地 运行 查询),减少总体系统复杂性,并允许您构建使用最新数据的连续应用程序。