PySpark - StorageLevel

StorageLevel decide como o RDD deve ser armazenado. No Apache Spark, o StorageLevel decide se o RDD deve ser armazenado na memória ou no disco, ou ambos. Ele também decide se serializar RDD e se deve replicar partições RDD.

O seguinte bloco de código tem a definição de classe de um StorageLevel -

class pyspark.StorageLevel(useDisk, useMemory, useOffHeap, deserialized, replication = 1)

Agora, para decidir o armazenamento de RDD, existem diferentes níveis de armazenamento, que são fornecidos a seguir -

  • DISK_ONLY = StorageLevel (True, False, False, False, 1)

  • DISK_ONLY_2 = StorageLevel (True, False, False, False, 2)

  • MEMORY_AND_DISK = StorageLevel (True, True, False, False, 1)

  • MEMORY_AND_DISK_2 = StorageLevel (True, True, False, False, 2)

  • MEMORY_AND_DISK_SER = StorageLevel (True, True, False, False, 1)

  • MEMORY_AND_DISK_SER_2 = StorageLevel (True, True, False, False, 2)

  • MEMORY_ONLY = StorageLevel (False, True, False, False, 1)

  • MEMORY_ONLY_2 = StorageLevel (False, True, False, False, 2)

  • MEMORY_ONLY_SER = StorageLevel (False, True, False, False, 1)

  • MEMORY_ONLY_SER_2 = StorageLevel (False, True, False, False, 2)

  • OFF_HEAP = StorageLevel (True, True, True, False, 1)

Vamos considerar o seguinte exemplo de StorageLevel, onde usamos o nível de armazenamento MEMORY_AND_DISK_2, o que significa que as partições RDD terão replicação de 2.

------------------------------------storagelevel.py-------------------------------------
from pyspark import SparkContext
import pyspark
sc = SparkContext (
   "local", 
   "storagelevel app"
)
rdd1 = sc.parallelize([1,2])
rdd1.persist( pyspark.StorageLevel.MEMORY_AND_DISK_2 )
rdd1.getStorageLevel()
print(rdd1.getStorageLevel())
------------------------------------storagelevel.py-------------------------------------

Command - O comando é o seguinte -

$SPARK_HOME/bin/spark-submit storagelevel.py

Output - A saída para o comando acima é fornecida abaixo -

Disk Memory Serialized 2x Replicated