【问题标题】:Spark, Cassandra connector,Spark、Cassandra 连接器、
【发布时间】:2015-06-17 12:50:22
【问题描述】:

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

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

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

最有效的方法是什么?

【问题讨论】:

    标签: cassandra apache-spark


    【解决方案1】:

    由于您将 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>)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-08
      • 2015-03-12
      • 2018-11-28
      • 2016-02-16
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 2018-04-03
      相关资源
      最近更新 更多