Pod względem RDD
trwałości, jakie są różnice pomiędzy cache()
i persist()
w iskry?
202
Pod względem RDD
trwałości, jakie są różnice pomiędzy cache()
i persist()
w iskry?
Dzięki cache()
używasz tylko domyślnego poziomu pamięci:
MEMORY_ONLY
dla RDDMEMORY_AND_DISK
dla zestawu danychZa pomocą persist()
możesz określić, który poziom pamięci chcesz mieć zarówno dla RDD, jak i zestawu danych .
Z oficjalnych dokumentów:
- Możesz oznaczyć,
RDD
aby utrwalono, korzystając z metodpersist
() lubcache
().- każda utrwalona
RDD
może być przechowywana przy użyciu innejstorage level
- Metoda
cache
() jest skrótem do używania domyślnego poziomu pamięci, którym jestStorageLevel.MEMORY_ONLY
(przechowuj zdezrializowane obiekty w pamięci).
Użyj, persist()
jeśli chcesz przypisać poziom pamięci inny niż:
MEMORY_ONLY
do RDDMEMORY_AND_DISK
dla zestawu danychCiekawy link do oficjalnej dokumentacji: jaki poziom pamięci wybrać
cache()
teraz używa MEMORY_AND_DISKMEMORY_AND_DISK
jest wartością domyślną tylko dla zestawów danych.MEMORY_ONLY
jest nadal wartością domyślną dla RDDzobacz więcej szczegółów tutaj ...
Buforowanie lub trwałość to techniki optymalizacji obliczeń (iteracyjnych i interaktywnych) Spark. Pomagają one zachować tymczasowe wyniki częściowe, aby można je było ponownie wykorzystać w kolejnych etapach. Tymczasowe wyniki jako
RDD
s są zatem przechowywane w pamięci (domyślnie) lub w większej pamięci masowej, takiej jak dysk i / lub replikowane.RDD
s mogą być buforowane przy użyciucache
operacji. Można je również utrwalić za pomocąpersist
operacji.Ostrzeżenie - rozsądnie buforuj ... zobacz ( (Dlaczego) musimy wywoływać pamięć podręczną lub utrzymywać na RDD )
To, że możesz buforować
RDD
pamięć, nie oznacza, że powinieneś ślepo to robić. W zależności od tego, ile razy dostęp do zestawu danych jest uzyskiwany, oraz nakład pracy związany z tym, ponowne obliczenia mogą być szybsze niż cena płacona za zwiększoną presję pamięci.Oczywiste jest, że jeśli czytasz zestaw danych tylko wtedy, gdy nie ma sensu buforować go, spowoduje to spowolnienie pracy. Rozmiar buforowanych zestawów danych można zobaczyć w Spark Shell.
Lista wariantów ...
* Zobacz poniższy przykład: *
Uwaga: Ze względu na bardzo małą i czysto syntaktyczną różnicę między buforowaniem a trwałością
RDD
s oba te terminy są często używane zamiennie.Zobacz więcej wizualnie tutaj ....
Trwaj w pamięci i na dysku:
Pamięć podręczna
Buforowanie może znacznie poprawić wydajność aplikacji.
źródło
Nie ma różnicy. Od
RDD.scala
.źródło
Spark daje 5 rodzajów poziomu pamięci
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER
DISK_ONLY
cache()
użyjeMEMORY_ONLY
. Jeśli chcesz użyć czegoś innego, użyjpersist(StorageLevel.<*type*>)
.Domyślnie dane
persist()
będą przechowywane na stosie JVM jako niezserializowane obiekty.źródło
Obie metody Cache () i persist () służą do poprawy wydajności obliczania iskier. Te metody pomagają zapisać wyniki pośrednie, dzięki czemu można je ponownie wykorzystać w kolejnych etapach.
Jedyna różnica między cache () i persist () polega na tym, że za pomocą techniki Cache możemy zapisać wyniki pośrednie w pamięci tylko wtedy, gdy jest to potrzebne, natomiast w Persist () możemy zapisać wyniki pośrednie na 5 poziomach pamięci (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY).
źródło