我有传感器数据,近似的格式显示了我在cassandra表中存储它的方式。
CREATE TABLE sensor_log (
sensor_id BIGINT,
created_at TIMEUUID,
SensorEventType TEXT,
PRIMARY KEY(sensor_id, created_at)
)
WITH CLUSTERING ORDER BY (created_at DESC)大约有10种不同类型的事件(SensorEventType)会发生。假设他们的名字是
(SensorEventType)SET1...SET10. 我会把这些数据保存90天。
这些类型的事件中,有些发生得相当频繁,有些则很少见。
所以现在发生的是SET1发生在day1上,而SET9发生在60天之后。在此期间,还记录了许多其他SensorEventType记录。因此,在这两者之间将会有1亿个数据点。
example
SENSOR_ID Data stored Clustered by created_at.
1 SET2,SET1,SET3,SET4....100millionrandomSET....SET9,SET3,SET4....
2 SET4,SET5,SET1,SET4....100millionrandomSET....SET2,SET9,SET6....
each SET stored in sequential manner by created_at我需要将SET1和SET9数据指向逻辑中的每个传感器关联起来,以获得一些信息。我正在考虑使用spark来做同样的事情。这种关联纯粹基于SensorEventType,并且是查找SET9和SET1之间的持续时间的业务逻辑要求。因此,如果SET9发生在SET1之后,请记下两次事件之间的持续时间,并将其保存在另一个表中。
现在的问题是,为了关联Spark中的数据,我似乎需要加载所有的数据点,它们都在内存中,以便在SET1和SET9之间关联。这是解决这个设计问题的正确方式吗?
任何人都有更好的指针来说明这应该如何设计,以及如何在数据点之间的spark中进行关联。我是新来的火花,任何帮助将不胜感激。
发布于 2015-08-07 04:09:20
我不确定我是否完全理解您的用例,但似乎您不需要使用Spark,可以在简单的Cassandra中进行这种关联。
与记录单个分区中传感器所有事件的表不同,为什么不将事件类型添加到分区键中,如下所示:
CREATE TABLE sensor_log (
sensor_id BIGINT,
created_at TIMEUUID,
SensorEventType TEXT,
PRIMARY KEY((sensor_id, SensorEventType), created_at)
)
WITH CLUSTERING ORDER BY (created_at DESC)这会将每个传感器的每个设置值放在各自的分区中,以便您可以独立查询。
通过这样做,SET1和SET9事件之间的1亿个数据点将被放在不同的分区中,不会妨碍您。因此,当SET9事件传入时,只需从该传感器的SET1分区中选择最新的数据点:
SELECT created_at FROM sensor_log WHERE sensor_id=x and SensorEventType=SET1 LIMIT 1;现在,从传入的SET9事件的created_at时间中减去created_at时间。
像这样的分区也可以简化Spark的使用,因为您可以从这些较小的分区创建RDD,并且只加载SET1和SET9分区,而不是所有的SET类型。
https://stackoverflow.com/questions/31838851
复制相似问题