PySpark - 存储级别

  • 简述

    StorageLevel 决定如何存储 RDD。在 Apache Spark 中,StorageLevel 决定 RDD 是应该存储在内存中还是应该存储在磁盘上,或者两者兼而有之。它还决定是否序列化 RDD 以及是否复制 RDD 分区。
    以下代码块具有 StorageLevel 的类定义 -
    
    class pyspark.StorageLevel(useDisk, useMemory, useOffHeap, deserialized, replication = 1)
    
    现在,为了决定 RDD 的存储,有不同的存储级别,如下所示 -
    • 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)
    让我们考虑下面的 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-------------------------------------
    
    命令- 命令如下 -
    
    $SPARK_HOME/bin/spark-submit storagelevel.py
    
    输出- 上述命令的输出如下 -
    
    Disk Memory Serialized 2x Replicated