这是我最后一个问题的后续;设置是我正在使用 StreamInsight 进行时间序列预测。
扩展那里给出的描述,让我用x_n
我的输入流来表示,为了这个例子,让我们假设每 10 次观察后我预测前面的 10 个值;我将这些预测称为p_n
。系列索引将对应于时间,因此第一个p_n
将是p_11
.
所以我们有
x_1, x_2, ..., x_10 --> p_11, p_12, ..., p_20
x_11, x_12, ..., x_20 --> p_21, p_22, ..., p_30
etc.
我有一个用户定义的流运算符,它从我的输入流中收集,当有足够的事件时,它会为该循环x_n
吐出所有的;p_n
TXPower275 证实这是一个合理的策略。
我的下一步是将预测与输入时的实际值进行比较;为此,我想加入这两个流。加入使用事件时间戳,所以我需要时间戳正确排列。
(除此之外:虽然我有点事件,但我也可以使用间隔事件较短的间隔,以便我得到重叠的连接......当我到达它时我会越过那座桥)。
(为了完整性:当我收到处于周期中间的输入事件时,我的 UDSO 会输出一个“虚拟事件”,我使用事件有效负载中的一个字段来识别它。我过滤掉虚拟事件以创建预测的 -事件流。)
为了更清楚地说明这一点,这是我的接收器的一些输出。这些是上面提到的虚拟事件。每行开头的时间戳是 StreamInsight 事件时间(这些是点事件),每行末尾的时间戳实际上是我的有效负载中的一个字段。
12:03:30 PM CEP#NO_OUTPUT Predicted NaN 12:03:30 PM
12:03:40 PM CEP#NO_OUTPUT Predicted NaN 12:03:40 PM
12:03:50 PM CEP#NO_OUTPUT Predicted NaN 12:03:50 PM
12:04:00 PM CEP#NO_OUTPUT Predicted NaN 12:04:00 PM
12:04:10 PM CEP#NO_OUTPUT Predicted NaN 12:04:10 PM
12:04:20 PM CEP#NO_OUTPUT Predicted NaN 12:04:20 PM
12:04:30 PM CEP#NO_OUTPUT Predicted NaN 12:04:30 PM
12:04:40 PM CEP#NO_OUTPUT Predicted NaN 12:04:40 PM
12:04:50 PM CEP#NO_OUTPUT Predicted NaN 12:04:50 PM
实际的预测是这样的:
12:05:00 PM CEP#2#Space99 Predicted 0.57 12:05:10 PM
12:05:00 PM CEP#2#Space99 Predicted 0.66 12:05:20 PM
12:05:00 PM CEP#2#Space99 Predicted 1.54 12:05:30 PM
12:05:00 PM CEP#2#Space99 Predicted 1.34 12:05:40 PM
12:05:00 PM CEP#2#Space99 Predicted 1.31 12:05:50 PM
12:05:00 PM CEP#2#Space99 Predicted 0.93 12:06:00 PM
12:05:00 PM CEP#2#Space99 Predicted 2.19 12:06:10 PM
12:05:00 PM CEP#2#Space99 Predicted 0.86 12:06:20 PM
请注意,所有这些事件的时间都是相同的。这是因为我的 UDSO 将触发其计算p_n
的时间戳分配给所有(一个周期) 。x_n
这与MSDN 文档一致—— “每个输出事件的时间戳是基于相应输入事件的时间戳”。
我想做的是使用有效负载字段中的时间创建预测事件。
我认为我应该使用的是
ToPointStreamable(payload => PointEvent<MyPayload>.CreateInsert(payload.eventTime, payload)
,我尝试将其插入的方式是这样的:
var separated_stream = prediction_query.ToEnumerable(StreamEventOrder.FullyOrdered)
.ToPointStreamable(payload => PointEvent<MyPayload>.CreateInsert(payload.eventTime, payload),
AdvanceTimeSettings.IncreasingStartTime);
我prediction_query
的类型是IQStreamable<MyPayload>
.
这是行不通的。如上所示,事件即将到来并正在生成预测,但我的“ separated_stream
”可能不存在。
使用与我的其他查询相同的模式打印到控制台 -
var observer = cepApplication_.DefineObserver(() => System.Reactive.Observer.Create<T>(/* print action */));
observer.Deploy(name);
separated_stream.Bind(observer).Run()
所以我认为那里没有任何错误。
我正在使用事件流调试器,但找不到此查询...但我确实找到了两个进程,我只识别其中一个中的流,所以我认为第二个可能与此有关separated_stream
。诊断告诉我在此过程或其任何操作员中没有事件。查询和操作员一样“正在运行”,调试器中的任何内容都不像错误。
我的定义separated_stream
不正确,我应该如何解决?
谢谢。
编辑:事件流调试器中的第二个进程与问题查询有关 - 如果我注释掉查询,则进程不会显示。