Ja rozumiem tak:
W StreamingContext określasz "batchDuration", tj. przedział czasu, który będzie dzielił dane wejściowe na "batche", taki batch to RDD (podstawowy koncept sparka), zaś sekwencja RDD to DStream (czyli strumień). Jak źródło coś wyprodukuje, to Reciever (skojarzony ze strumieniem) zapisuje to "coś" w pamięci sparka. Grupa "cosi" wyprodukowanych w okresie "batchDuration" składa się na RDD/batch.
Teraz jak przetwarzasz te dane, to masz 2 opcje przetwarzania:
- Bezstanowe - przetwarzasz pojedynczy batch/RDD i nie masz żadnych zależności do innych RDD
- "Stanowe" - dla przetwarzanego RDD masz możliwość zajrzenia do wcześniejszych RDD (dla tego przypadku definiujesz okienko, które pozwala zaglądać w przeszłość, "sliding window", które zwraca Ci DStream obejmujący okres ["teraz"-"długość okna"; "teraz"])
Nie wiem jak spark wewnętrznie ogarnia RDD, które przestały być potrzebne, ale zakładam, że jeśli nie ma np. okienek które zaglądają dalej niż 1h, to spark postawiony przed faktem rychłego braku pamięci usuwa RDD "starsze niż" 1h.
Uwaga, mogę to źle rozumieć :-)
StreamingContext
isocketTextStream