【发布时间】:2019-05-24 12:21:50
【问题描述】:
根据标题:Spark 可以将单个 RDD/Dataset/DataFrame 分区的一部分存储在内存中,一部分存储在磁盘上吗?换句话说,假设持久化级别支持它,如果一个分区太大而无法存储在内存中,是否可以将其部分保存在内存中,部分保存在磁盘中?
我的用例是我想写出非常大的 Parquet 文件,而 Spark 的写行为是为每个分区写出一个文件。
【问题讨论】:
标签: apache-spark pyspark
根据标题:Spark 可以将单个 RDD/Dataset/DataFrame 分区的一部分存储在内存中,一部分存储在磁盘上吗?换句话说,假设持久化级别支持它,如果一个分区太大而无法存储在内存中,是否可以将其部分保存在内存中,部分保存在磁盘中?
我的用例是我想写出非常大的 Parquet 文件,而 Spark 的写行为是为每个分区写出一个文件。
【问题讨论】:
标签: apache-spark pyspark
恐怕这在 spark 中是不可能的。内存和磁盘选项使用分区作为最小的数据划分。 根据official documentation,如果使用 MEMORY_AND_DISK 存储级别,则将不适合内存的分区保存在磁盘上。
MEMORY_AND_DISK 将 RDD 作为反序列化的 Java 对象存储在 JVM 中。如果 RDD 不适合内存,存储不适合的分区 磁盘,并在需要时从那里读取它们。
MEMORY_AND_DISK_SER 具有类似的行为,但将 RDD 存储为序列化的 Java 对象(每个分区一个字节数组)
也许您有一些方法可以减小分区的大小。我认为这会有所帮助。
【讨论】: