我在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连接器功能的组合以多种方式完成 . What is the recommended way?

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

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

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