C# StreamInsight将窗口开始时间传递到UDA
我有个问题,我被困了两天。也许你们中有人能帮我 我尝试将窗口的开始时间传递给用户定义的聚合。不幸的是,我不知道怎么做。我认为应该这样做:C# StreamInsight将窗口开始时间传递到UDA,c#,linq,streaminsight,C#,Linq,Streaminsight,我有个问题,我被困了两天。也许你们中有人能帮我 我尝试将窗口的开始时间传递给用户定义的聚合。不幸的是,我不知道怎么做。我认为应该这样做: var tot = from row in tumblingWin select new { value = row.UserDefinedAggregate<Dataclass, Total2, double>(new StartBoundsConfig
var tot = from row in tumblingWin
select new
{
value = row.UserDefinedAggregate<Dataclass, Total2, double>(new StartBoundsConfig
{
Winstart = row.WinStart().Ticks
}) * processinginterval,
};
UDA看起来是这样的:
public class Total2: CepAggregate<Dataclass,double>
{
private Dataclass lastone; //keep it, if needed for next window
private StartBoundsConfig _conf;
public Total2(StartBoundsConfig config)
{
_conf = config;
}
public override double GenerateOutput(IEnumerable<Dataclass> events)
{
//TODO check if value on window start => if not use last from previous as starting value
bool checkfirst = true;
long result = 0;
long tsone = 0;
foreach (var evts in events)
{
if (checkfirst == true)
{
tsone = evts.Gentime.Ticks;
checkfirst = false;
}
else
{
long tstwo = evts.Gentime.Ticks;
long delta = tstwo - tsone;
long value = (long) evts.Value;
result += delta*value;
tsone = tstwo;
}
lastone = evts;
}
return result;
}
}
我试图将窗口开始传递到UDA的配置,并从那里读取它。
有人知道为什么这样不行吗?我怎样才能把窗口的开始时间传递给UDA,在那里用它进行计算
我非常感谢你的任何暗示
乔你需要一个时间敏感的UDA。从CepTimeSensitiveAggregate see继承,生成输出方法将WindowDescriptor作为签名的一部分。作为奖励,您还将获得事件的临时头,这样您就不需要将此信息作为有效负载的一部分排队。虽然有些边缘用例需要这样做,但在大多数情况下,您并不需要这样做 谢谢你的快速回复。这个链接提供了我需要的其他信息。但再次感谢你的好主意。