私は今2日間立ち往生している問題があります。たぶん、あなたたちの誰かが私を助けることができます。
ユーザー定義の集計に渡されたウィンドウの開始時刻を取得しようとしています。残念ながら、これを行う方法がわかりません。私がそれがうまくいくはずだと思った方法は次のようになります:
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に渡して計算に使用する方法を知っている人はいますか?
どんなヒントにもとても感謝しています。
ジョー