如何在Apache Cassandra中汇总(求和)?

时间:2015-04-03 00:02:06

标签: cassandra

我有数百万条记录的表格,所以我需要根据查询对值进行分组和求和。

我知道cassandra不支持,所以我需要将数百万行带入内存并在客户端进行计算(在Java中是这样)吗?

2 个答案:

答案 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;