按附近时间戳

时间:2015-12-18 18:33:28

标签: apache-spark cassandra apache-storm

我有这张Cassandra表:

CREATE TABLE events(
    userId uuid,
    datetime timestamp,
    id uuid,
    event text,
    PRIMARY KEY (userId, datetime, id)
);

我想要做的是针对特定用户在同一时间发生的群组事件。因此,例如,如果一个用户的事件发生在:

9:00:11 AM
9:00:13 AM
9:00:16 AM

9:03:55 AM
9:03:58 AM
9:04:03 AM

9:15:35 AM
9:15:38 AM

我想得到3组:

1: 9:00:11 AM to 9:00:16 AM
2: 9:03:55 AM to 9:04:03 AM
3: 9:15:35 AM to 9:15:38 AM

我希望机器学习算法如 DBSCAN可以弄清楚应该如何进行聚类,但是对它们之间间隔小于一分钟的事件进行分组可能就足够了。

如果我可以在每个组的开始和结束时间获得置信区间,则获得积分。

我已经研究过使用基本的CQL,如group by,Apache Spark的groupByKey和MLib群集,但没有取得任何成功。理想情况下,使用Apache Spark Streaming几乎可以实时处理结果。

这是一个绿地项目,因此Cassandra和Spark不是必须的。我也考虑过使用Storm。

1 个答案:

答案 0 :(得分:3)

您似乎在谈论会话窗口。现在我只知道Google Dataflow为您提供系统支持。如果使用Storm,则需要手动编写会话逻辑代码。

在任何情况下,如果您使用的是流式传输系统,首先需要在时间戳上对数据进行排序,并通过系统按升序时间戳顺序对其进行流式处理。

Apache Flink可能会给你一些比Storm更多的支持来编写代码,但这也是一种手动操作。即使Flink比Storm更接近Google Dataflow(Flink也可能在不久的将来添加会话窗口)。

顺便说一句:您提到的groupBy / keyBy语句适合按用户ID分区数据,但不适用于构建窗口。