【发布时间】:2015-12-18 18:33:27
【问题描述】:
我有这张 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 Clustering,但没有任何成功。理想情况下,将使用 Apache Spark Streaming 近乎实时地处理结果。
这是一个新建项目,因此 Cassandra 和 Spark 不是必须的。我也考虑过使用 Storm。
【问题讨论】:
-
大约在同一时间 不是一个好的规范,也绝对不是我们可以转换为代码的东西。对于初学者来说,窗口大小是否有限制?如果是这样,组重叠会发生什么。或者可能只是连续事件之间的差异?
-
你是对的,这不是一个明确的规范。我希望机器学习算法可以弄清楚应该如何进行聚类。但是,对它们之间间隔不到一分钟的事件进行分组可能就足够了。感谢您的反馈。
-
如果您更改架构,您可以创建任意存储桶作为集群键(时间戳之前/左侧),并将其用于分组。
标签: apache-spark cassandra apache-storm