按附近的时间戳对 Cassandra 条目进行分组
Group Cassandra entries by nearby timestamp
我有这个 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
我想要 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。
您似乎在谈论 会话 windows。现在我只知道 Google Dataflow 可以为您提供系统支持。如果您使用 Storm,则需要手动编写会话逻辑代码。
无论如何,如果您使用的是流式传输系统,您首先需要根据时间戳对数据进行排序,然后按时间戳升序在系统中进行流式传输。
Apache Flink 可能会比 Storm 为您提供更多支持来编写此代码,但这也是一项手动工作。即使 Flink 比 Storm 更接近 Google Dataflow(Flink 也可能在不久的将来添加会话 windows)。
顺便说一句:您提到的 groupBy
/ keyBy
语句适用于按用户 ID 对数据进行分区,但不适用于构建 windows。
我有这个 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
我想要 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。
您似乎在谈论 会话 windows。现在我只知道 Google Dataflow 可以为您提供系统支持。如果您使用 Storm,则需要手动编写会话逻辑代码。
无论如何,如果您使用的是流式传输系统,您首先需要根据时间戳对数据进行排序,然后按时间戳升序在系统中进行流式传输。
Apache Flink 可能会比 Storm 为您提供更多支持来编写此代码,但这也是一项手动工作。即使 Flink 比 Storm 更接近 Google Dataflow(Flink 也可能在不久的将来添加会话 windows)。
顺便说一句:您提到的 groupBy
/ keyBy
语句适用于按用户 ID 对数据进行分区,但不适用于构建 windows。