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