存储级别 StorageLevel

Spark提供了一个名为StorageLevel的单例对象。提供了控制RDD存储级别的标志信息:

  • 标记RDD是否使用内存或ExternalBlockStore
  • 如果RDD内存不足或ExternalBlcokStore,是否将其放入磁盘
  • 是否将数据以序列化形式保存在内存中
  • 是否在多个节点复制RDD分区

如果是创建自定义的存储级别对象,使用StorageLevel提供的工厂方法。


  private def this(flags: Int, replication: Int) = {
    this((flags & 8) != 0, (flags & 4) != 0, (flags & 2) != 0, (flags & 1) != 0, replication)
  }

内部标志变量, 由四个Bool型和一个整型进行构造:

  • useDisk(Boolean),是否使用磁盘 传入flags 与8取与运算;
  • useMemory(Boolean),是否使用内存 传入flags 与4取与运算;
  • useOffHeap,(Boolean) 是否使用堆外内存 传入flags 与2取与运算;
  • deserialized(Boolean) 是否开启反序列化 传入flags 与1取与运算;
  • replication: 副本数量(默认值为1),必须小于40.

根据 useOffHeap 加工的 memoryMode 方法返回的 MemoryMode.ON_HEAP 和 MemoryMode.OFF_HEAP .

参数有效性, useMemory 和 useDisk 必须至少有一个为true。

object StorageLevel

  • DISK_ONLAY 分为 3个子级别
    • DISK_ONLY: 只开了 useDisk 开关
    • DISK_ONLY2
    • DISK_ONLY3
  • MEMORY_ONLY 细分为