我在Cassandra中有两个表(agg_count_1
和agg_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.counter
到counter_1
和agg_count_2.counter
到counter_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所需的每个分区执行单个查询,因此不会请求或序列化不需要的数据。