2015-11-02 23 views
5

Mam pewne dane przychodzące jako id, float, float, float. Chcę min(), max() i sum() pola w kolejności i grupy to przez wartość id.flink: zastosowanie wielu agregacji w strumieniu z okien

Korzystanie flatMap Mam Tuple4 z bitami, ale nie jestem pewien, jak wysłać go do następnego kroku.

Co mam:

dataStream.flatMap(new mapper()).keyBy(0) 
    .timeWindowAll(Time.of(5, TimeUnit.SECONDS)).min(1) 
    .timeWindowAll(Time.of(5, TimeUnit.SECONDS)).sum(2) 
    .timeWindowAll(Time.of(5, TimeUnit.SECONDS)).sum(3) 
    .map(new printstuff()); 

Czy to jest prawidłowy sposób sobie z tym poradzić? Czy muszę wstawić każde timeWindowAll w swoje własne oświadczenie z keyBy i tak dalej?

Odpowiedz

5

Łańcuch wielu funkcji agregacji nie jest jeszcze obsługiwany w interfejsie DataStream API.

W tym przykładzie tworzysz trzy odrębne, 5-sekundowe okna, z których każdy stosuje pojedynczą agregację. To prawdopodobnie nie jest to, co chcesz zrobić. Wdałbym niestandardowy ReduceFunction, który wykonuje wszystkie agregacje naraz w jednym oknie. Zobacz Okno Zredukuj w przykładzie DataStream documentation.