Em termos de RDD
persistência, quais são as diferenças entre cache()
e persist()
na centelha?
202
Em termos de RDD
persistência, quais são as diferenças entre cache()
e persist()
na centelha?
Com cache()
, você usa apenas o nível de armazenamento padrão:
MEMORY_ONLY
para RDDMEMORY_AND_DISK
para conjunto de dadosCom persist()
, você pode especificar qual nível de armazenamento deseja para RDD e Dataset .
Dos documentos oficiais:
- Você pode marcar um
RDD
para ser persistente usando os métodospersist
() oucache
() nele.- cada persistente
RDD
pode ser armazenado usando umstorage level
- O
cache
método () é uma abreviação para usar o nível de armazenamento padrão, que éStorageLevel.MEMORY_ONLY
(armazenar objetos desserializados na memória).
Use persist()
se você deseja atribuir um nível de armazenamento diferente de:
MEMORY_ONLY
para o RDDMEMORY_AND_DISK
para o conjunto de dadosLink interessante para a documentação oficial: qual nível de armazenamento escolher
cache()
agora usa MEMORY_AND_DISKMEMORY_AND_DISK
é o valor padrão apenas para conjuntos de dados.MEMORY_ONLY
ainda é o valor padrão para RDDveja mais detalhes aqui ...
Armazenamento em cache ou persistência são técnicas de otimização para cálculos Spark (iterativos e interativos). Eles ajudam a salvar resultados parciais intermediários para que possam ser reutilizados em estágios subsequentes. Esses resultados intermediários, como
RDD
s, são mantidos na memória (padrão) ou em armazenamento mais sólido, como disco e / ou replicados.RDD
s podem ser armazenados em cache usando acache
operação Eles também podem ser persistidos usando apersist
operação.Aviso -Cache criteriosamente ... consulte ( (Por que) precisamos chamar cache ou persistir em um RDD )
Só porque você pode armazenar
RDD
em cache uma memória não significa que você deve fazê-lo cegamente. Dependendo de quantas vezes o conjunto de dados é acessado e a quantidade de trabalho envolvida, a recomputação pode ser mais rápida que o preço pago pelo aumento da pressão da memória.Não é preciso dizer que, se você ler um conjunto de dados apenas quando não houver motivo para armazená-lo em cache, ele realmente tornará seu trabalho mais lento. O tamanho dos conjuntos de dados em cache pode ser visto no Spark Shell.
Listando variantes ...
* Veja abaixo o exemplo: *
Nota: Devido à diferença muito pequena e puramente sintática entre armazenamento em cache e persistência de
RDD
s, os dois termos são frequentemente usados de forma intercambiável.Veja mais visualmente aqui ....
Persista na memória e no disco:
Cache
O armazenamento em cache pode melhorar o desempenho do seu aplicativo, em grande medida.
fonte
Não há diferença. De
RDD.scala
.fonte
O Spark fornece 5 tipos de nível de armazenamento
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER
DISK_ONLY
cache()
vai usarMEMORY_ONLY
. Se você quiser usar outra coisa, usepersist(StorageLevel.<*type*>)
.Por padrão
persist()
, os dados serão armazenados no heap da JVM como objetos não serializados.fonte
Cache () e persist (), ambos os métodos são usados para melhorar o desempenho da computação spark. Esses métodos ajudam a salvar resultados intermediários para que possam ser reutilizados em estágios subsequentes.
A única diferença entre cache () e persist () é que, usando a técnica Cache, podemos salvar resultados intermediários na memória apenas quando necessário, enquanto em Persist () podemos salvar os resultados intermediários em 5 níveis de armazenamento (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY).
fonte