Pracujemy z spark 1.6
i staramy się zachować globalną tożsamość dla podobnych zdarzeń. Może istnieć kilka "grup" zdarzeń o identycznym ID (w przykładzie jako liczba, litery są dodawane tylko dla unikalności). I wiemy, że niektóre z tych wydarzeń są podobne, więc jesteśmy w stanie je połączyć. Chcemy zachować coś takiego:Stwórz stanowy łańcuch dla różnych zdarzeń i przypisz globalny identyfikator w iskrze
Z -> 1, 2, 3
X -> 4
więc w przyszłości, jeżeli pewne zdarzenia z identyfikatorem 4 przyjdą możemy przypisać X
jako globalnej tożsamości.
Proszę sprawdzić przykład dla lepszego zobrazowania:
Powiedzmy mamy jakieś dane strumieniowe przyjście do pracy zapłonowej.
Ponieważ wydarzenie 1 to nasz pierwszy występ, chcemy przypisać 1 to Z
. Następnie wiemy, że 1b i 2c są podobne. więc chcemy zachować mapowanie. To samo dotyczy 2e i 3f, więc potrzebujemy mapowania 3-2
. Na razie mamy 3 pary: 1->Z
, 2->1
, .
I chcemy stworzyć "historyczną" ścieżkę: Z <- 1 <- 2 <- 3
Na koniec będziemy mieli wszystkie zdarzenia z ID = Z
.
1a -> Z
1b -> Z
2c -> Z
2d -> Z
2e -> Z
3f -> Z
3g -> Z
3h -> Z
4i -> X
Staraliśmy się wykorzystać mapwithstate
ale jedyną rzeczą, byliśmy w stanie to zrobić, że 2->1
i 3->2
. Z mapwithstate
nie byliśmy w stanie uzyskać stanu dla "rodzica" w stanie dla bieżącego zdarzenia - np. bieżące zdarzenie 3 z rodzicem 2 i nie może uzyskać 2 -> 1
ani żadnego 1 -> Z
.
Czy możliwe jest wykonanie globalnego mapowania? Wypróbowaliśmy już akumulatory i emisję, ale wygląda na to, że nie nadaje się zbyt dobrze. I nie byliśmy w stanie zastąpić zdarzeń 1 dla pierwszego mapowania i zdarzeń 2 dla drugiego mapowania z Z
.
Jeśli pojawi się nowe zdarzenie 5
i będzie podobne z 3h, na przykład musimy ponownie przypisać mapowanie 5->Z
.
Myślę, że największym problemem do pokonania jest Sekwencyjność. Co się stanie, jeśli '1b' i' 2c' będą przetwarzane równolegle? – maasg
@maasg Dzięki za komentarz !! Zapomniałem wspomnieć, że robimy agregację z 'groupBy'. '1b' i' 2c' są zgrupowane i wiemy, że '1b' i' 2c' są połączone i są podobne. abyśmy mogli zaktualizować '1b' tą informacją (to samo dla' 2c', gdzie wiemy, że '2c' jest podobne z' 1b'). Ale problem dotyczy '2d', ponieważ wiemy, że' 2' ma rodzica '1' (dla poprzedniego zdarzenia przechowujemy to w' stanie'), ale musimy wiedzieć, że '1' ma nadrzędne' Z' (i 'Z' jest również "nadrzędny" dla '2'), który jest" root ". – VladoDemcak
Jak ważne jest podobieństwo pary do znalezienia sekwencji 'Z <-1 <-2 <-3'? Co się stanie, jeśli np. Przetworzymy '1a, 3f, 2c'? Czy będziemy mieć 'Z <- 1 <- 2' i' X <- 3' b/c nie mamy relacji "2> 3" w chwili 3 nadejdzie? – maasg