按时间戳分组cassandra条目

n53p2ov0  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(235)

我有一张Cassandra的table:

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

我想分三组:

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集群没有任何成功。理想情况下,结果将通过apachespark流进行近实时处理。
这是一个绿地项目,所以Cassandra和Spark不是必须的。我也考虑过使用storm。

nlejzf6q

nlejzf6q1#

你好像在说会话窗口。现在我只知道googledataflow为您提供系统支持。如果使用storm,则需要手工编写会话逻辑。
在任何情况下,如果您使用的是流式处理系统,那么您首先需要对时间戳上的数据进行排序,并在系统中按时间戳升序进行流式处理。
apache-flink可能会比storm提供更多的支持来编写代码,但这也需要手动操作。即使flink比storm更接近googledataflow(flink也可能在不久的将来添加会话窗口)。
顺便说一句: groupBy / keyBy 您提到的语句适用于按用户id对数据进行分区,但不适用于构建窗口。

相关问题