我有数百万条记录的表格,所以我需要根据查询对值进行分组和求和。
我知道cassandra不支持,所以我需要将数百万行带入内存并在客户端进行计算(在Java中是这样)吗?
答案 0 :(得分:1)
值得研究的一个选项是spark-cassandra-connector。您可以通过simple tutorial演示如何从cassandra表中执行'count'和'sum':
val rdd = sc.cassandraTable("test", "kv")
println(rdd.count)
println(rdd.map(_.getInt("value")).sum)
虽然库是用scala编写的,但也可以使用java API。此外,您无需设置火花群即可使其正常工作,因为您可以使用客户端中嵌入的spark而无需任何其他配置。随着您的需求增长,您可能需要考虑设置一些火花工作者。
答案 1 :(得分:1)
可能需要考虑保留一个在添加条目时增加的计数器,以便预先计算总和。
CREATE TABLE blargs_sum (
sum counter,
blarg varchar,
PRIMARY KEY (blarg)
);
----
UPDATE blargs_sum SET sum = sum + 1 WHERE blarg='Rafael';
另一种选择是在插入时使用轻量级事务,甚至使用静态列。但这意味着你会获得每个分区总数,而不是全局分区。可以在这里找到示例:http://www.datastax.com/dev/blog/cql-in-2-0-6
BEGIN BATCH
UPDATE bills SET balance = -208 WHERE user='user1' IF balance = -8;
INSERT INTO bills (user, expense_id, amount, description, paid)
VALUES ('user1', 2, 200, 'hotel room', false);
APPLY BATCH;