0

私は今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に渡して計算に使用する方法を知っている人はいますか?

どんなヒントにもとても感謝しています。

ジョー

4

1 に答える 1

0

時間依存の UDA が必要です。CepTimeSensitiveAggregate ( http://technet.microsoft.com/en-us/library/ee842915.aspxを参照) から継承すると、生成出力メソッドは署名の一部として WindowDescriptor を持ちます。おまけとして、イベントの一時ヘッダーも取得できるため、この情報をペイロードの一部としてエンキューする必要はありません。これを必要とするエッジ ユース ケースがいくつかありますが、ほとんどの場合、必要ありません。

于 2014-05-13T17:09:59.260 に答える