Spark,Cassandra连接器,

时间:2015-01-13 18:38:49

标签: cassandra apache-spark

我们大量使用Cassandra宽行来存储时间序列,因为它们非常适合用例。

create table user_events ( user_id text, timestmp timestamp, event text, primary key((user_id), timestmp));

假设我想使用spark进行以下聚合:选择上个月至少有1个事件的所有user_ids。

最有效的方法是什么?

1 个答案:

答案 0 :(得分:0)

由于您将user_id作为主键,因此查询时需要知道用户ID是什么。但是从你的问题描述中,它是另一种方式。

您的表格如下:

create table user_events (
  start timestamp,
  eventtime timestamp,
  user_id text,
  event text,
  primary key (start, eventtime, userid)
);

您可以根据每秒的事件按天或按周对传入事件进行分区 - 这样就不会超过Cassandra的宽行限制。

然后在Spark中,您可以使用:

进行查询
sc.cassandraTable(keyspace, table)
  .select("user_id")
  .where("start = ?", <a set of partitions>)
  .where("eventtime > ?", <one month before timestamp>)