Pyspark 简明教程

PySpark - StorageLevel

StorageLevel 决定如何存储 RDD。在 Apache Spark 中,StorageLevel 决定 RDD 是应该存储在内存中,还是应该存储在磁盘上,或者同时存储在内存和磁盘上。它还决定是否对 RDD 进行序列化以及是否对 RDD 分区进行复制。

以下代码块包含 StorageLevel 的类定义 −

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

现在,要决定 RDD 的存储位置,有不同的存储级别,如下所示 −

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

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

  3. MEMORY_AND_DISK = StorageLevel(True, True, False, False, 1)

  4. MEMORY_AND_DISK_2 = StorageLevel(True, True, False, False, 2)

  5. MEMORY_AND_DISK_SER = StorageLevel(True, True, False, False, 1)

  6. MEMORY_AND_DISK_SER_2 = StorageLevel(True, True, False, False, 2)

  7. MEMORY_ONLY = StorageLevel(False, True, False, False, 1)

  8. MEMORY_ONLY_2 = StorageLevel(False, True, False, False, 2)

  9. MEMORY_ONLY_SER = StorageLevel(False, True, False, False, 1)

  10. MEMORY_ONLY_SER_2 = StorageLevel(False, True, False, False, 2)

  11. OFF_HEAP = StorageLevel(True, True, True, False, 1)

我们考虑以下 StorageLevel 示例,其中我们使用存储级别 MEMORY_AND_DISK_2, ,这意味着 RDD 分区将具有 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 − 命令如下所示−

$SPARK_HOME/bin/spark-submit storagelevel.py

Output − 以上命令的输出如下 −

Disk Memory Serialized 2x Replicated