我在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连接器功能的组合以多种方式完成 . What is the recommended way?
我很高兴听到要避免的解决方案 . 联合通常是昂贵的,但我希望如果你(实际上我)没有做错任何事情,这种时间序列的“拉链”应该是相当有效的 .
基于Spark-Cassandra documentation使用 joinWithCassandraTable
听起来不是最理想的,因为它为每个分区执行单个查询:
joinWithCassandraTable利用java驱动器为源RDD所需的每个分区执行单个查询,因此不会请求或序列化不需要的数据 .