加入Spark中的时间序列Cassandra表

时间:2016-02-06 06:39:54

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

我在Cassandra中有两个表(agg_count_1agg_count_2)都具有相同的架构:

CREATE TABLE agg_count_1 (
  pk_1 text,
  pk_2 text,
  pk_3 text,
  window_start timestamp,
  count counter,
  PRIMARY KEY (( pk_1, pk_2, pk_3 ), window_start)
) WITH CLUSTERING ORDER BY ( window_start DESC )

window_start是一个四舍五入到最接近15分钟的时间戳,这意味着它在两个表中的值完全相同,但某些时间窗口的行可能会丢失。

我希望有效地(内部)将主键上的这两个表连接到第三个表,其中的架构和存储值非常相同agg_count_1.countercounter_1agg_count_2.countercounter_2列:

CREATE TABLE agg_joined (
  pk_1 text,
  pk_2 text,
  pk_3 text,
  window_start timestamp,
  int counter_1,
  int counter_2,
  PRIMARY KEY (( pk_1, pk_2, pk_3 ), window_start)
) WITH CLUSTERING ORDER BY ( window_start DESC )

这可以通过Scala,Spark和Spark-Cassandra连接器功能的组合以多种方式完成。 推荐的方式是什么?

我很高兴听到要避免的解决方案。加入一般都很昂贵但我希望如果你(实际上是我)没有做错任何事情,这种时间序列的“拉链”应该是相当有效的。

基于Spark-Cassandra documentation使用joinWithCassandraTable听起来不是最理想的,因为它会为每个分区执行单个查询:

  

joinWithCassandraTable利用java驱动器为源RDD所需的每个分区执行单个查询,因此不会请求或序列化不需要的数据。

0 个答案:

没有答案